您的位置:首页 > 运维架构 > Linux

科大Linux内核分析之实验一

2016-02-22 14:59 615 查看

通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的,作者徐冰,原创作品,来自云课堂《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

1.C语言代码

#include<stdio.h>
int g(int x)
{
return x+3;
}

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

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


2.在Linux64位上面生成汇编语言为:

需要声明:其中带.的为注释内容(已经删掉),寄存器ebp为堆栈底,esp为堆栈的顶部,

ret指令: pop eip

leave指令: movl %ebp,%esp popl %ebp

call指令:pushl %eip

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


3.分析堆栈的变化

程序从main函数开始:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: