增加未知类型的变量

Increment a Variable With an Unknown Type

在 Python 2.7 的 pwntools 库中,地址声明为 address = p64(0x7fffffff0000)。我一直在绞尽脑汁想弄清楚如何增加这个地址,尽管我在编辑期间一直 运行 进入转换错误。我从最基本的东西开始,最初:

from pwn import *
address = p64(0x7fffffff0000)    # starting hex value
for i in range(0, 65535):     # how many times you want to increment

    i +=1
    address = p64(0x7fffffff0000 + i)        # increment varhex by 1
    print address

虽然输出不是以十六进制方式递增,而是以 unicode 方式递增,如下所示:

...
_-\xff\xff\xff\x7f\x00\x00
`-\xff\xff\xff\x7f\x00\x00
a-\xff\xff\xff\x7f\x00\x00
...

有谁知道如何增加此变量以使输出显示为:

...
\x01\x00\xff\xff\xff\x7f\x00\x00
\x02\x00\xff\xff\xff\x7f\x00\x00
...
\x00\x01\xff\xff\xff\x7f\x00\x00
...

p64 只是 str 的简单转换器。当 str 打印在 Python 2 上时,repr 将优先于 \x 转义符显示可打印的 ASCII 字符;如果你想阻止这种情况,你需要以你喜欢的形式明确地写它。一个简单的修复程序可能是:

from future_builtins import map, zip  # Gets Python 3 generator based version of map/zip
from itertools import repeat
import binascii

def bytes_to_x_escapes(s):
    hexstring = binascii.hexlify(s)
    escapecodes = map(''.join, zip(repeat(r'\x'), *[iter(hexstring)]*2))
    return ''.join(escapecodes)

使用此修复程序,您可以将 print 更改为:

print bytes_to_x_escapes(address)

它会以您期望的方式显示。