gcc -S test.c编译出的程序的一个问题

发布于 2022-09-26 12:43:58 字数 2151 浏览 10 评论 0

最近在学linux的汇编程序,我把一个最简单的C程序:

  1. int
  2. main(void)
  3. {
  4.     return 0;
  5. }

复制代码
通过gcc -S test.c编译出的程序是:

  1. .file   "test.c"
  2.         .text
  3. .globl main
  4.         .type   main, @function
  5. main:
  6.         leal    4(%esp), %ecx
  7.         andl    $-16, %esp
  8.         pushl   -4(%ecx)
  9.         pushl   %ebp
  10.         movl    %esp, %ebp
  11.         pushl   %ecx
  12.         movl    $0, %eax
  13.         popl    %ecx
  14.         popl    %ebp
  15.         leal    -4(%ecx), %esp
  16.         ret
  17.         .size   main, .-main
  18.         .ident  "GCC: (GNU) 4.1.2 20070925 (Red Hat 4.1.2-27)"
  19.         .section        .note.GNU-stack,"",@progbits

复制代码

跟其他程序编译出来的比较了下,发现:
        leal    4(%esp), %ecx
        andl    $-16, %esp
        pushl   -4(%ecx)
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ecx
这几句在每个汇编是都会有.问下,这些是linux下特有的吗?这些代码都有些什么作用?在哪方面的文档中对这些有说明的?

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

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

发布评论

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

评论(3

一曲琵琶半遮面シ 2022-10-03 12:43:58

可能是和操作系统有关

下面的程序

int main() {
    return 0;
}

int f() {
    int i=0;
    i++;
    return 0;
}

幼儿园老大 2022-10-03 12:43:58

庆祝新版开张,发本汇编的书http://linux.chinaunix.net/bbs/thread-885941-1-10.html
看一眼这个

路还长,别太狂 2022-10-03 12:43:58

呵呵。。好的。我也再看看。谢谢

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