11
以下英特尔指令是如何计算地址0x600860
的? 0x4003b8
+ 0x2004a2
= 60085a
,所以我不明白计算是如何进行的。这是什么英特尔jmpq指令呢?
0x4003b8 <[email protected]>: jmpq *0x2004a2(%rip) # 0x600860 <[email protected]>
以下英特尔指令是如何计算地址0x600860
的? 0x4003b8
+ 0x2004a2
= 60085a
,所以我不明白计算是如何进行的。这是什么英特尔jmpq指令呢?
0x4003b8 <[email protected]>: jmpq *0x2004a2(%rip) # 0x600860 <[email protected]>
在Intel,JMP,CALL等都是相对下一个指令的程序计数器。
你的情况的下一个指令是在0x4003be
和0x4003be + 0x2004a2 == 0x600860
啊,所以公式为(%RIP)'+'当前指令Size'之前'当前address' +'价值。谢谢 – RouteMapper
对于那些想知道jmpq中的“q”的人,它只是表示AT&T/GAS汇编语法中操作数的大小(q代表四元组)。 – Nickolay
- > 0x100000ebb:81 7d fc 03 00 00 00 cmpl $ 0x3,-0x4(%rbp) 0x100000ec2:0f 85 06 00 00 00 jne 0x100000ece 0x100000ec8:ff 25 12 ba de ff jmpq * -0x2145ee(%rip) 0x100000ece:48 8d 3d bb 00 00 00 leaq 0xbb(%rip),%rdi – Div