Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的十六进制代码生成器_Python_X86_Bytecode - Fatal编程技术网

python中的十六进制代码生成器

python中的十六进制代码生成器,python,x86,bytecode,Python,X86,Bytecode,我正在尝试用python生成一个十六进制代码生成器,用于学校的一个助手 我想强行使用地址空间,但是,我无法在python中构造真正的十六进制代码 我的剧本: for j in range(0, 100): var = "\\x%x" % j newpath = "\xa0\xf4\xff"+var print newpath 字节码“\xa0\xf4\xff”被正确打印-作为正确的十六进制码。但是,我的bruteforcer无法生成真正的十六进制代码

我正在尝试用python生成一个十六进制代码生成器,用于学校的一个助手

我想强行使用地址空间,但是,我无法在python中构造真正的十六进制代码

我的剧本:

 for j in range(0, 100):
       var = "\\x%x" % j
       newpath = "\xa0\xf4\xff"+var
       print newpath
字节码“\xa0\xf4\xff”被正确打印-作为正确的十六进制码。但是,我的bruteforcer无法生成真正的十六进制代码,只能生成字符串“\xab”等。如何生成真正的十六进制代码:本质上,我希望生成32位机器的整个地址空间

编辑: 更具体地说,通过查看一些任意输出,您可以看到最后一个“hexcode”不是一个hexcode,而是一个字符串:

 ���\x5d
 ���\x5e
 ���\x5f
 ���\x60
 ���\x61
 ���\x62
 ���\x63

十六进制只是一个数字的不同表示形式。它使用的是基数16,而不是我们通常使用的基数10

记住这一点,任何数字都可以表示为十六进制数:

for i in range(0, 0x20):
    print "0x%08X" %i
输出是

0x00000000
0x00000001
0x00000002
0x00000003
...
0x0000000E
0x0000000F
0x00000010
0x00000011
...
通过在print语句中使用
%X
,我们说“解释为基数16”。您还可以在十六进制表示中指定一个数字,就像我在
范围(0,0x20)
语句中所做的那样

之所以会看到打印输出的
“\xa0\xf4\xff”
,是因为python无法将该字符串中的值替换为字符,并打印次优值,即数字的字符串表示形式。不要将四字节数组与其32位字表示或四个字符串表示混淆,这是一样的

我建议您使用内置函数
ord()
hex()
chr()
,了解事物的工作原理。例如:

print ord('a')
print hex(10)
print chr(97)
输出:

97
0xa
a

我认为您需要编写一个函数来获得所需的输出:

def hexrepr(s):
    quotechar = '"' if s.count("'") >= s.count('"') else "'"
    rep = [quotechar]
    for ch in s:
        # control char?
        if ch != quotechar:
            rep += '\\x{:02x}'.format(ord(ch))
        else: # escape embedded quotechar
            rep += "\\{}".format(ch)
    rep += quotechar
    return "".join(rep)

for j in xrange(100):
    newpath = "\xa0\xf4\xff" + chr(j)
    print hexrepr(newpath)
输出:

“\xa0\xf4\xff\x00”
“\xa0\xf4\xff\x01”
“\xa0\xf4\xff\x02”
“\xa0\xf4\xff\x03”
...
“\xa0\xf4\xff\x61”
“\xa0\xf4\xff\x62”
“\xa0\xf4\xff\x63”