gcc -S test.c编译出的程序的一个问题
最近在学linux的汇编程序,我把一个最简单的C程序:
- int
- main(void)
- {
- return 0;
- }
复制代码
通过gcc -S test.c编译出的程序是:
- .file "test.c"
- .text
- .globl main
- .type main, @function
- main:
- leal 4(%esp), %ecx
- andl $-16, %esp
- pushl -4(%ecx)
- pushl %ebp
- movl %esp, %ebp
- pushl %ecx
- movl $0, %eax
- popl %ecx
- popl %ebp
- leal -4(%ecx), %esp
- ret
- .size main, .-main
- .ident "GCC: (GNU) 4.1.2 20070925 (Red Hat 4.1.2-27)"
- .section .note.GNU-stack,"",@progbits
复制代码
跟其他程序编译出来的比较了下,发现:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
这几句在每个汇编是都会有.问下,这些是linux下特有的吗?这些代码都有些什么作用?在哪方面的文档中对这些有说明的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
可能是和操作系统有关
下面的程序
return 0;
}
int f() {
int i=0;
i++;
return 0;
}
庆祝新版开张,发本汇编的书http://linux.chinaunix.net/bbs/thread-885941-1-10.html
看一眼这个
呵呵。。好的。我也再看看。谢谢