生成随机堆栈内存地址

时间:2017-12-18 03:09:07

标签: python-3.x

如何生成随机存储器地址

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添加的后缀

除外

1 个答案:

答案 0 :(得分:1)

您可以在循环中生成地址,如果前一个地址有空字节,则重新创建地址。地址只是整数,因此您可以使用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

大多数情况下,你只需要一次通过循环。只有当你特别不走运时才需要多次尝试。