汇编MOV指令中指针地址0x7FF6FB7CF420的计算方法咨询
汇编RIP相对寻址的地址计算问题
相关代码
汇编代码截图对应的指令如下:
00007FF6FB15A7C0 | 48:8B05 594C6700 | mov rax,qword ptr ds:[7FF6FB7CF420]
问题
计算机是如何计算出0x7FF6FB7CF420这个内存地址的?我需要从该地址获取数据,因此需要得到对应的指针。尝试将相关字节与当前基址为0x7FF6FABF0000的EXE模块起始地址相加,未得到有效结果。
解答
这条指令用的是x86-64的RIP相对寻址,目标地址的计算逻辑分三步:
- 确定RIP的值:RIP是指令指针寄存器,指向当前指令的下一条指令地址。当前指令位于
0x7FF6FB15A7C0,这条指令总长度为7字节(48 8B 05是3字节操作码,后续59 4C 67 00是4字节偏移量),因此RIP的值为0x7FF6FB15A7C0 + 7 = 0x7FF6FB15A7C7。 - 解析偏移量:x86架构采用小端字节序,内存中存储的
59 4C 67 00需反转字节顺序,得到32位有符号整数0x00674C59。 - 计算目标地址:将RIP的值与该偏移量相加,即
0x7FF6FB15A7C7 + 0x00674C59 = 0x7FF6FB7CF420,这就是指令指向的目标内存地址。
你之前直接用模块基址加偏移失败,原因是这个偏移是相对于RIP(当前指令下一条地址),而非模块基址。如果要通过模块基址推导目标地址,可按以下步骤计算:
- 计算当前指令在模块内的偏移:
0x7FF6FB15A7C0 - 0x7FF6FABF0000 = 0x56A7C0 - 计算目标地址相对于模块基址的偏移:
0x56A7C0 + 7 + 0x00674C59 = 0xC0F420 - 得到最终目标地址:
0x7FF6FABF0000 + 0xC0F420 = 0x7FF6FB7CF420
内容的提问来源于stack exchange,提问作者ayes l
相关产品推荐
相关产品推荐

