阻止 Bash 删除双引号字符串中的零字节?

阻止 Bash 删除双引号字符串中的零字节?

我需要为argvC 程序的参数提供任意字节。

但是,如果字节放在双引号内,则零字节将被删除,如下所示:

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 字节(如或zshdo ),也无法通过命令行参数或环境变量将这些字符串传递给其他程序。perlpython

相关内容