ASM
......
.text:000000000062D153 lea rax, aaa ; "aaaaaaaaaaa"
.text:000000000062D15A lea rdx, bbb ; "bbbbbbbbbbbbbbbb"
......
.rodata:0000000000F63221 aaa db 'aaaaaaaaaaa',0
.rodata:0000000000F6322D bbb db 'bbbbbbbbbbbbbbbb',0
.rodata:0000000000F6323E align 20h
......
HEX
......
000000000062D153 48 8D 05 C7 60 93 00
000000000062D15A 48 8D 15 CC 60 93 00
......
我不明白,这个地址“aaa”(F63221)在十六进制48 8D 05 C7 60 93 00? 如何用十六进制替换a到b,得到?
.text:000000000062D15A lea rdx, aaa ; "aaaaaaaaaaa"
答案 0 :(得分:3)
000000000062D153 48 8D 05 C7 60 93 00
实际上是:
lea rax, [rip+0x9360c7]
这是RIP相对地址,偏移量在指令的最后4个字节中(C7 60 93 00
= 0x009360C7
)。该寻址模式是指相对于下一条指令的存储器(不是当前的,因为RIP指向下一条指令)。如果您进行数学运算,您会发现0x0062D15A
+ 0x009360C7
为0x00F63221
。
要引用bbb
,您需要计算0x00F6322D
- (0x0062D15A
+ 7
)。这给出了0x9360CC
的偏移值。