首页 > 代码库 > AT&T jmpq指令

AT&T jmpq指令

(gdb) disassemble

Dump of assembler code for function _Znam@plt:

=> 0x0000000000400738 <+0>:     jmpq   *0x2006ba(%rip)        # 0x600df8 <_Znam@got.plt>

   0x000000000040073e <+6>:     pushq  $0x3

   0x0000000000400743 <+11>:    jmpq   0x4006f8


jmpq *0x2006ba(%rip) :

首先将rip值+0x2006ba=0x600df8,然后jmp 0x600df8; 特别注意这个*号并不是取地址符,而是表示跳转地址值前面的一个标志,解释如下:

http://www.cnblogs.com/yanghong-hnu/p/5700852.html:

常数/立即数的格式:
在AT&T语法中对立即数,须在其前加前缀 $ 来指明,而Inter语法则不需要。
另外, 在常数前也必须加一个前缀字符 * ,而Inter语法则也是不需要的。


5跳转 在 AT&T 汇编格式中,绝对转移和调用指令(jump/call)的操作数前要加上‘*‘作为前缀,而在 Intel 格式中则不需要。

6远跳转

远程转移指令和远程子调用指令的操作码,在 AT&T 汇编格式中为 "ljump" 和 "lcall",


所以,jmpq 操作数前的*仅仅是个符号而已


AT&T jmpq指令