首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将\x00作为参数传递给程序?

如何将\x00作为参数传递给程序?
EN

Stack Overflow用户
提问于 2011-09-06 15:17:15
回答 6查看 8.9K关注 0票数 5

我有一个小程序,我希望将外壳代码作为参数进行传递。在there代码中,必须传递\x00。我尝试了以下命令:

代码语言:javascript
运行
复制
./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

EN

回答 6

Stack Overflow用户

发布于 2011-09-06 15:35:12

不用谢。Unix使用C样式的字符串作为调用命令的参数,并且它们是NUL终止的字符序列。

您可以做的是重写您的程序(或找到一个调用变体),以接受其标准输入中的参数。NUL字节在那里工作得很好,实际上被广泛使用,通常用作文件名的分隔符,因为它们几乎是文件名不能包含的唯一内容。有关最受欢迎的示例,请参阅find-print0 switch和xarg的switch -0

票数 2
EN

Stack Overflow用户

发布于 2012-03-21 19:06:53

如果你检查一下wc,你会发现NUL字符确实被传递了:

代码语言:javascript
运行
复制
$ python -c 'print "\x00"' | wc -c
2

去掉末尾的换行符:

代码语言:javascript
运行
复制
$ python -c 'import sys; sys.stdout.write("\x00")' | wc -c
1

这些数据被传递给脚本,但问题是NUL不能是变量值的一部分。

要了解如何执行此操作,请尝试将以下代码传递给脚本:

代码语言:javascript
运行
复制
$ cat test.sh 
#!/usr/bin/env bash
echo ${#1}
$ ./test.sh "$(python -c 'import sys; sys.stdout.write("\x00")')"
0

消失了。但是有一种方法可以保存从标准输入读取的日期,使用重定向或管道:

代码语言:javascript
运行
复制
$ 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
票数 2
EN

Stack Overflow用户

发布于 2015-07-31 14:43:23

带有--null选项的xargs命令可以提供帮助:

代码语言:javascript
运行
复制
python -c 'print "\x30\x00\x31"' | xargs --null ./program

我试过了,它起作用了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7316232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档