Linux内核分析实验1——汇编一个简单的C程序
2017-02-19 23:27
267 查看
实验代码
int g(int x) { return x + 3; } int f(int x) { return g(x); } int main(void) { return f(2) + 1; }
汇编指令:
gcc -S main.c
汇编结果
g: pushl %ebp movl %esp, %ebp movl 8(%ebp),%eax addl $3, %eax popl %ebp ret f: pushl %ebp movl %esp, %ebp pushl 8(%ebp) call g addl $4, %esp leave ret main: pushl %ebp movl %esp, %ebp pushl $2 call f addl $4, %esp addl $1, %eax leave ret
分析:
程序从main函数开始首先
pushl %ebp
movl %esp, %ebp
相当于enter指令,保存ebp的值,然后将ebp的值设为esp,相当于保存原函数的堆栈,然后建立当前函数的堆栈,而且它还有这样的功能,见下面的博客
http://blog.csdn.net/zhangxinrun/article/details/5888425
把立即数2压栈,然后调用函数f
同样enter一下
pushl 8(%ebp),将当前ebp所指向的堆栈位置向上数两个的位置,也就是放2的那个位置,压栈。
做一个变址寻址,即将2放入累加器eax中
累加器再加3,累加器为5.
然后pop %ebp,相当于leave,由于g函数中没有额外压栈,所以没做mov指令
返回f函数,
esp向上移动一个堆栈位置然后leave,
返回main
同样esp向上移动一个堆栈位置然后leave,与此同时eax加1,得到最终值6
程序结束
相关文章推荐
- Linux内核分析-反汇编一个简单的C程序并简单分析
- 20135239益西拉姆 Linux内核分析 汇编一个简单的c程序并分析其指令过程
- 云课堂 Linux内核分析 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- Linux内核分析一:反汇编一个简单的C程序
- 第1节 反汇编一个简单的C程序【Linux内核分析】
- Linux内核分析——反汇编一个简单C程序
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- lab1:通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 分析一个简单C程序的汇编代码,理解计算机是如何工作的
- 汇编一个简单的C程序,分析代码理解计算机是怎么工作的
- 反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 一个简单C程序的汇编代码分析
- 深入理解计算机系统读书笔记之一个简单汇编程序的调试分析
- 汇编语言(王爽)》(第九章、实验8分析一个奇怪的程序)学习笔记
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
- 第一次尝试汇编:一个简单C程序的分析。
- 《Linux内核分析》(一)——反汇编一个简单的C程序并分析其汇编代码的执行
- 反汇编一个简单的C程序,分析汇编代码