递增类型未知的变量

时间:2018-08-23 01:04:01

标签: python python-2.7 for-loop pwntools

在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
...

1 个答案:

答案 0 :(得分:1)

p64只是str的简单转换器。在Python 2上打印str时,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)

它将显示您的期望方式。