当前位置: 代码迷 >> C语言 >> .c文件对应到.s文件中的困惑
  详细解决方案

.c文件对应到.s文件中的困惑

热度:279   发布时间:2008-06-01 11:22:48.0
.c文件对应到.s文件中的困惑
Test.c如下:
#include<stdio.h>
void fun(void);
int main(void)
{
    fun();
    return 0;
}

gcc下翻译成Test.s,如下:
    .file    "Test.c"
    .text
.globl main
    .type    main,@function
main:
    pushl    %ebp
    movl    %esp, %ebp
    subl    $8, %esp
    andl    $-16, %esp
    movl    $0, %eax
    subl    %eax, %esp
    call    fun
    movl    $0, %eax
    leave
    ret
.Lfe1:
    .size    main,.Lfe1-main
    .ident    "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)"

对其中汇编语句
         pushl    %ebp
    movl    %esp, %ebp
    subl    $8, %esp
    andl    $-16, %esp
    movl    $0, %eax
    subl    %eax, %esp
不理解各有什么作用,请教一下大家,谢谢!
搜索更多相关的解决方案: 文件  困惑  

----------------解决方案--------------------------------------------------------
顶上去
----------------解决方案--------------------------------------------------------
再顶!
----------------解决方案--------------------------------------------------------
没办法,被你的精神感动了。

不知道你反汇编的目的是什么,你汇编基础不扎实就该先学汇编。
等你用汇编写个子函数时你写出来的差不多也是这样,这都成模板了。

    pushl   %ebp               ;将ebp入栈保护
    movl    %esp, %ebp         ;用ebp保留esp当前值,便于取入口参数
    subl    $8, %esp           ;在栈中分配8字节空间,没有实际作用
    andl    $-16, %esp         ;将esp低4位清零,内存对齐
    movl    $0, %eax           ;这里两句是第三次分配空间,也没有实际作用
    subl    %eax, %esp


C编译为中间代码时编译器会加入很多多余指令,有些是增强安全性防止溢出覆盖,有的是使用通用模板,优化不够造成的,看着很让人生气。即使是蹩脚的汇编程序员写的代码也比优秀的编译器生成的代码强。

[[it] 本帖最后由 VxWorks 于 2008-6-2 22:23 编辑 [/it]]
----------------解决方案--------------------------------------------------------
谢谢VxWorks!
你说的fish是什么东东啊?
----------------解决方案--------------------------------------------------------
FISH is a recursive acronym that stands for"FISH Is Syntax Highlight"

具体可以看这个帖子:
http://bbs.bccn.net/viewthread.php?tid=216338

近期不想继续修改fish了,都已经开源了,希望有人能接着做下去。

[[it] 本帖最后由 VxWorks 于 2008-6-4 09:52 编辑 [/it]]
----------------解决方案--------------------------------------------------------
  相关解决方案