出于缓冲区溢出分配的目的,我正在尝试将地址0x004007ad打印到终端。由于处理器的缘故,我必须在小字节序中执行此操作。但是,当我尝试打印地址时,不会包含\ x00。以下是我的python程序的代码:
password_verify()
如何打印它以便包含\ x00?
答案 0 :(得分:1)
通过在它们前面放另一个反斜杠来转义所有反斜杠...
hex_string = "\\xad\\x07\\x40\\x00"
print "\x01" * 28 + hex_string
应该可以解决问题的
编辑:关于您的问题...
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)
答案 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)