我需要为argv
C 程序的参数提供任意字节。
但是,如果字节放在双引号内,则零字节将被删除,如下所示:
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
在输出中显示了它们:
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 参数是以零结尾的字符串,因此它们不能包含任何 NUL 字节。您必须通过管道、文件、共享内存等将数据传递给您的程序,或者进行一些转义和取消转义。
即使bash
在其字符串中支持 NUL 字节(如或zsh
do ),也无法通过命令行参数或环境变量将这些字符串传递给其他程序。perl
python