linux汇编callq命令参数含义

请问反汇编代码中callq 23<main+0x13>的含义:
第一个参数我只知道是push 23,保存返回地址,第二个<main+0x19>应该是fun函数地址,但是fun函数应该是在main的前面啊,怎么地址反而比main的地址还高?

C代码:

#include <stdio.h>

void fun(int a)
{
}
 
int main()
{
    int a = 1234;
    fun(a);
}

objdump -D main.o main.asm
反汇编代码main.asm如下

0000000000000000 <fun>:
   0:   55                      push   %rbp
   1:   48 89 e5                mov    %rsp,%rbp
   4:   89 7d fc                mov    %edi,-0x4(%rbp)
   7:   90                      nop
   8:   5d                      pop    %rbp
   9:   c3                      retq   

000000000000000a <main>:
   a:   55                      push   %rbp
   b:   48 89 e5                mov    %rsp,%rbp
   e:   48 83 ec 10             sub    $0x10,%rsp
  12:   c7 45 fc 03 00 00 00    movl   $0x3,-0x4(%rbp)
  19:   8b 45 fc                mov    -0x4(%rbp),%eax
  1c:   89 c7                   mov    %eax,%edi
  1e:   e8 00 00 00 00          callq  23 <main+0x19>
  23:   b8 00 00 00 00          mov    $0x0,%eax
  28:   c9                      leaveq 
  29:   c3                      retq   
阅读 11.2k
1 个回答
✓ 已被采纳新手上路,请多包涵
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题