1.汇编代码分析

来源:互联网 发布:淘宝全屏代码 编辑:程序博客网 时间:2024/05/29 13:22

说明:

文章是在学习《Linux内核分析》时所写的。然后在实验楼做了实验,所以这算是实验报告。

《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000




main.c 内容如下:

----------------------

int g(int x)
{
  return x + 3;

}

int f(int x)
{
  return g(x);
}

int main(void)
{
  return f(8) + 1;
}

----------------------


然后使用命令: gcc -S main.c  -m32 -o main.s

由于生成的内容比较多,所以删除了伪指令。




main.s内容如下:

----------------------

g:
    pushl    %ebp
    movl    %esp, %ebp
    movl    8(%ebp), %eax
    addl    $3, %eax
    popl    %ebp
    ret
f:
    pushl    %ebp
    movl    %esp, %ebp
    subl    $4, %esp
    movl    8(%ebp), %eax
    movl    %eax, (%esp)
    call    g
    leave
    ret
main:
    pushl    %ebp
    movl    %esp, %ebp
    subl    $4, %esp
    movl    $8, (%esp)
    call    f
    addl    $1, %eax
    leave
    ret

----------------------


现在开始分析汇编代码执行过程:

说明:

  • 比如说movl,最后面的'l' 表示这是32位操作
  • leave 相当于 
  1. movl %ebp, %esp
  2. popl %ebp;

pushl %ebp相当于

esp-=4

movl %ebp (%esp)


自己制作了一张动图,演示了执行的整个过程。图中有些错误,现在也不想修改了。



全文完