我有一个小程序,我希望将外壳代码作为参数进行传递。在there代码中,必须传递\x00。我尝试了以下命令:
./program `python -c 'print "\x01\x00\x00\x00\x9c\xd8\xff\xbf"'`但是\x00根本没有注册!传递给程序的参数是"\x01\x9c\xff\xbf“。
我不认为这是python的问题,而是传递参数的shell的问题。我正在使用bash shell。
现在,如何强制shell传递参数'\x00'?
感谢并致以问候
Hrishikesh Murali
发布于 2011-09-06 15:35:12
不用谢。Unix使用C样式的字符串作为调用命令的参数,并且它们是NUL终止的字符序列。
您可以做的是重写您的程序(或找到一个调用变体),以接受其标准输入中的参数。NUL字节在那里工作得很好,实际上被广泛使用,通常用作文件名的分隔符,因为它们几乎是文件名不能包含的唯一内容。有关最受欢迎的示例,请参阅find的-print0 switch和xarg的switch -0。
发布于 2012-03-21 19:06:53
如果你检查一下wc,你会发现NUL字符确实被传递了:
$ python -c 'print "\x00"' | wc -c
2去掉末尾的换行符:
$ python -c 'import sys; sys.stdout.write("\x00")' | wc -c
1这些数据被传递给脚本,但问题是NUL不能是变量值的一部分。
要了解如何执行此操作,请尝试将以下代码传递给脚本:
$ cat test.sh
#!/usr/bin/env bash
echo ${#1}
$ ./test.sh "$(python -c 'import sys; sys.stdout.write("\x00")')"
0消失了。但是有一种方法可以保存从标准输入读取的日期,使用重定向或管道:
$ cat test2.sh
#!/usr/bin/env bash
wc -c
$ ./test2.sh < <(python -c 'import sys; sys.stdout.write("\x00")')
1
$ python -c 'import sys; sys.stdout.write("\x00")' | ./test2.sh
1发布于 2015-07-31 14:43:23
带有--null选项的xargs命令可以提供帮助:
python -c 'print "\x30\x00\x31"' | xargs --null ./program我试过了,它起作用了。
https://stackoverflow.com/questions/7316232
复制相似问题