增加未知类型的变量
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)
它会以您期望的方式显示。
在 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)
它会以您期望的方式显示。