如何生成随机存储器地址
在0x7fffffffffff
和0x7fffffff0000
之间
然后用struct.pack("L", var)
包装
所以最后会打印出如下内容:
$ python3 -c 'import struct; print(struct.pack("L", 0x7fffffffd292))'
b'\x92\xd2\xff\xff\xff\x7f\x00\x00'
地址不应包含空字节(\x00)
,但struct添加的后缀除外
您可以在循环中生成地址,如果前一个地址具有空字节,则重新创建它。地址只是整数,因此您可以使用random.randint
创建它们:
import random
n = 0 # inital value, obviously has null bytes
while n & 0xff == 0 or n & 0xff00 == 0:
n = random.randint(0x7fffffff0000, 0x7fffffffffff)
# use n here, e.g. struct.pack or whatever
大多数时候你只需要一次通过循环。只有当你特别不走运时才需要多次尝试。