Python 如何在十六进制linux终端中发送参数

Python 如何在十六进制linux终端中发送参数,python,c,linux,arguments,Python,C,Linux,Arguments,我有一个C程序,在linux 32位中使用gcc编译,没有堆栈保护器。这个程序有一个参数,这是一个十六进制值的字符串(用于发送到堆栈以防止缓冲区溢出) 我的跑步示例是: ./myprogram.out `python -c "print 'A'*91+'\x20\xee\xff\xbf"` 我的问题是\x20值。这被解释为ASCII 32(空白),被解释为参数末尾,保存在堆栈中的值为00(空值,结束字符串) 堆栈中的值示例(十六进制): ..41 00 EE FF BF 对我来说,\x20是要

我有一个C程序,在linux 32位中使用gcc编译,没有堆栈保护器。这个程序有一个参数,这是一个十六进制值的字符串(用于发送到堆栈以防止缓冲区溢出)

我的跑步示例是:

./myprogram.out `python -c "print 'A'*91+'\x20\xee\xff\xbf"`
我的问题是\x20值。这被解释为ASCII 32(空白),被解释为参数末尾,保存在堆栈中的值为00(空值,结束字符串)

堆栈中的值示例(十六进制):

..41 00 EE FF BF


对我来说,\x20是要保存在堆栈中的内存地址的一部分,因此我需要在堆栈中以十六进制形式保存20。

您需要引用``的结果,以便它不会被shell拆分

顺便说一句,假设是sh变量,
$()
通常比``更可取。两者同时导致

./myprogram.out "$(python -c "print 'A'*91+'\x20\xee\xff\xbf'")"

情况可能更糟。您可能试图在命令行参数中传递空字节。