(gdb) disassemble
Dump of assembler code for function [email protected]:
=> 0x0000000000400738 <+0>: jmpq *0x2006ba(%rip) # 0x600df8 <[email protected]>
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指令
时间: 2024-10-11 22:53:30