Linux内核及分析 第一周 计算机是如何工作的?
2016-02-28 22:47
239 查看
C语言代码:
int g(int x)
{
return x + 5;
}
int f(int x)
{
return g(x);
}
int main(void)
{
return f(5) + 1;
}
反汇编代码:
g:
pushl %ebp 将ebp的值压栈,同时esp向下移动4个字节
movl %esp, %ebp ebp也指向esp指的位置
movl 8(%ebp), %eax 将ebp变址寻址8即向上移动8个字节,栈中的内容为 8,将8赋值给eax
addl $5, %eax eax = 8+3 = 11
popl %ebp ebp指向栈中值指向的位置,同时esp向上移动4个字节
ret esp向上移动4个字节,同时eip指向栈中值的位置
f:
pushl %ebp 将ebp的值压栈,同时esp向下移动4个字节
movl %esp, %ebp ebp也指向esp指的位置
subl $4, %esp esp向下移动4个字节
movl 8(%ebp), %eax 将ebp变址寻址8即向上移动8个字节,栈中的内容为 8,将8赋值给eax
movl %eax, (%esp) 将8放入esp指向的位置
call g 将eip的值(call指令的下一条)压入esp指向的位置,同时esp向下移动4个字节,eip指向g
leave ebp指向esp指向的位置,ebp指向栈中值的位置,esp向上移动4个字节
ret esp向上移动4个字节,同时eip指向栈中值的位置
main:
pushl %ebp 将ebp的值(0)压栈,同时esp向下移动4个字节
movl %esp, %ebp ebp也指向esp指的位置
subl $4, %esp esp向下移动4个字节
movl $5, (%esp) 将5放入esp指向的位置
call f 将eip的值压入esp指向的位置,同时esp向下移动4个字节,eip指向f
addl $1, %eax eax = 11 + 1 = 12
leave ebp指向esp指向的位置,ebp指向栈中值的位置,esp向上移动4个字节
ret main函数之前的eip的值(由操作系统定)
总结:计算的工作中将寄存器的地址和寄存器中的值压入堆栈中,通过寄存器指针变化和操作对数值进行操作计算,从而得到结果。
作者: 王雪铖
原创作品转载请注明出处
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
相关文章推荐
- 3-9-模拟银行排队过程-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- Android性能优化——优化下载以高效地访问网络
- VM虚拟机centos中的网络站点、主机访问
- 3-8-循环队列-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- 3-7-队列的链式存储-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- android studio怎么生成HttpClient
- ajax 请求二进制流 图片 文件 XMLHttpRequest 请求并处理二进制流数据 之最佳实践
- android学习笔记之HttpClient
- 第一周——初识计算机是如何工作的
- 第一节 计算机是如何工作的
- linux内核分析--计算机是如何工作的
- 三层网络 VLAN 静态路由、反向路由设置简记
- Linux内核分析第一周学习总结:计算机是如何工作的?
- 数据结构之二叉树
- 一个http请求发送到后端的详细过程
- 3-6-汉诺塔(Hanoi Tower)问题-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- 3-5-表达式求值-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- HttpClient 的post和get请求
- 3-4-迷宫寻路-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- XSS HTTP-only