linux汇编callq命令参数含义

发布于 2022-09-11 19:52:07 字数 1171 浏览 20 评论 0

请问反汇编代码中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   

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暖风昔人 2022-09-18 19:52:07

我在stackoverflow提交了同样的问题,已经找到答案了:
https://stackoverflow.com/que...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文