argv
C 프로그램에 대한 인수로 임의 바이트를 제공 해야 합니다 .
그러나 바이트가 큰따옴표 안에 있으면 아래와 같이 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
이러한 문자열은 명령줄 인수나 환경 변수를 통해 다른 프로그램에 전달될 수 없습니다.perl
python