Bash가 큰따옴표로 묶인 문자열에서 0바이트를 제거하지 못하게 하시겠습니까?

Bash가 큰따옴표로 묶인 문자열에서 0바이트를 제거하지 못하게 하시겠습니까?

argvC 프로그램에 대한 인수로 임의 바이트를 제공 해야 합니다 .

그러나 바이트가 큰따옴표 안에 있으면 아래와 같이 0바이트가 제거됩니다.

v="$(python -c 'import sys; sys.stdout.write("ABC\x18\x10\x00\x00\x10")')"
echo -n $v | hexdump -C
00000000  41 42 43 18 10 10                                 |ABC...|
00000006

실제로 큰따옴표는 hexdump출력에 표시되는 것처럼 0바이트를 제거합니다.

python -c 'import sys; sys.stdout.write("ABC\x18\x10\x00\x00\x10")' | hexdump -C
00000000  41 42 43 18 10 00 00 10                           |ABC.....|
00000008

이러한 임의 바이트를 프로그램 매개변수로 어떻게 제공할 수 있습니까?

답변1

C 프로그램의 argv 매개변수에 임의 바이트를 제공해야 합니다.

당신은 이것을 할 수 없습니다. 정의에 따르면 argv 매개변수는 0으로 끝나는 문자열이므로 NUL 바이트를 포함할 수 없습니다. 파이프, 파일, 공유 메모리 등을 통해 프로그램에 데이터를 전달하거나 일부 이스케이프 및 이스케이프 해제를 수행해야 합니다.

bash해당 문자열( as 또는 do )에서 NUL 바이트가 지원 되더라도 zsh이러한 문자열은 명령줄 인수나 환경 변수를 통해 다른 프로그램에 전달될 수 없습니다.perlpython

관련 정보