在 pwnlib 中,可以搜索特定字节,例如 0x66 字节如下:
print(next(p.elf.search(b'f')))
这反过来导致以下输出:
4195268
有了这个值,就可以将其作为radare2中的地址进行检查:
pd 1 @ 4195268
0x004003c4 666c insb byte [rdi], dx
它正确地指代包含所需“f”(0x66)的字节序列。但是,这既不是物理地址也不是虚拟地址:
[0x00400520]> ?v 4195268
0x4003c4
[0x00400520]> ?p 4195268
0x000003c4
而且我无法直接从radare2获取它。相反,在 r2 中搜索字节会导致引用虚拟地址,而不是引用 ELF 类从 pwntools 返回的值。
[0x00400520]> /x 66
0x004003c4 hit10_0 66
那么,它实际上是什么地址呢?以及如何在radare2 中获得pwntools 返回的相同值?
谢谢!