如何在python中使用\ x00填充地址

时间:2018-09-11 14:50:01

标签: python hex memory-address cpu-registers buffer-overflow

出于缓冲区溢出分配的目的,我正在尝试将地址0x004007ad打印到终端。由于处理器的缘故,我必须在小字节序中执行此操作。但是,当我尝试打印地址时,不会包含\ x00。以下是我的python程序的代码:

password_verify()

如何打印它以便包含\ x00?

2 个答案:

答案 0 :(得分:1)

通过在它们前面放另一个反斜杠来转义所有反斜杠...

hex_string = "\\xad\\x07\\x40\\x00"
print "\x01" * 28 + hex_string

应该可以解决问题的

enter image description here

编辑:关于您的问题...

import re
hex_string = "\\xad\\x07\\x40\\x00"
other_string = 28*"\\x01"
hex_string = re.sub("\\\\", "", hex_string)
other_string = re.sub("\\\\", "", other_string)
print(other_string + hex_string)

给... enter image description here

答案 1 :(得分:0)

不确定我是否回答得太晚。

我的理解是,您有一个原始地址的字符串缓冲区,并且想要按照人类习惯将其转储到stdout。

不幸的是,python无法很好地处理十六进制格式。一种方法是将原始值转换为适当的Python int并使用%x对其进行格式设置,并在前面手动添加0x。

跟随示例代码

import struct
hex_string = "\xad\x07\x40\x00"
v, = struct.unpack('<I', hex_string)
print ('0x' + '%08x' % v)