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