生成随机堆栈内存地址

问题描述 投票:0回答:1

如何生成随机存储器地址

0x7fffffffffff0x7fffffff0000之间

然后用struct.pack("L", var)包装

所以最后会打印出如下内容:

$ python3 -c 'import struct; print(struct.pack("L", 0x7fffffffd292))'
b'\x92\xd2\xff\xff\xff\x7f\x00\x00'

地址不应包含空字节(\x00),但struct添加的后缀除外

python-3.x
1个回答
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

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

© www.soinside.com 2019 - 2024. All rights reserved.