Linux内核分析 学习笔记之反汇编分析
来源:互联网 发布:2016淘宝女装店铺名字 编辑:程序博客网 时间:2024/06/02 07:52
之前一直零星地想去学习了解操作系统原理书也买了一大堆,但总没有个进度的压力,没能做出一个完整的系统。如今,网易云课堂里刚好有一个课程叫《linux内核分析》(哈哈 就当做个广告也无妨哈《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000)。希望能够跟着老师的进度执行下去吧。
闲话不多说,先搞定第一个作业吧:
第一周要求反汇编一个c程序,贴代码:
int g(int x){ return x + 3;} int f(int x){ return g(x);} int main(void){ return f(8) + 1;}
代码很简单,就是几个函数的调用,主要熟悉下c到汇编的转换:(可以使用虚拟的实验环境http://www.shiyanlou.com/courses/195,对如上代码使用gcc –S –o main.s main.c -m32进行汇编。注:1.汇编后有很多“.”开头的是一些附加的信息,可以先不去理解,删除之;2.注意实验楼的vim正则表达式不知道是不支持还是啥的,反正我自动删除以“.”开头的行总是失败,所以我将.s文件拷贝出来,通过notepad++进行了删除,其中,查找“.”开头的行的正则表达式如下^\t*[ ]*\..*\n)
以下贴处理后的汇编代码:
g:pushl%ebpmovl%esp, %ebpmovl8(%ebp), %eaxaddl$3, %eaxpopl%ebpretf:pushl%ebpmovl%esp, %ebpsubl$4, %espmovl8(%ebp), %eaxmovl%eax, (%esp)callgleaveretmain:pushl%ebpmovl%esp, %ebpsubl$4, %espmovl$8, (%esp)callfaddl$1, %eaxleaveret我们从main函数开始理解吧,
main:pushl%ebp ;帧指针入栈,便于以后恢复(此帧指针为调用该函数的帧指针)movl%esp, %ebp ;设置当前的帧指针(始终指向栈底,便于对参数之类的进行寻址及以后的恢复)subl$4, %esp ;分配空间,用于传递参数给int f(int x)movl$8, (%esp) ;给分配的空间赋值callf ;调用函数faddl$1, %eax ;设置返回值(当返回参数较小时,能够用32位eax保存的,否则可能用eax表示指针,指向返回值)leave ;相当于 movl %ebp, %esp popl %ebpret ;返回函数调用的下一句再看看函数g吧
g:pushl%ebpmovl%esp, %ebpmovl8(%ebp), %eax ;主要是这句,取出输入参数,具体参看下图addl$3, %eaxpopl%ebpret
看到图片便不难理解主要是取出传入参数进行计算。至于函数f,略……
由于内容比较简单,故到此为止,也做为我此次学习的开始吧^_^
0 0
- Linux内核分析 学习笔记之反汇编分析
- linux内核分析1--反汇编分析
- Linux内核分析-1/反汇编(堆栈)
- Linux内核分析学习_Week1_反汇编一个简单的C程序
- linux内核分析——简单代码反汇编为汇编代码分析
- linux内核分析之-x86汇编原理
- C++反汇编与逆向分析之数据类型的基本表现学习笔记
- Linux内核分析-反汇编一个简单的C程序并简单分析
- Linux内核分析——分析C程序的反汇编内容
- Linux汇编代码学习,反汇编简单的c及分析汇编代码工作过程
- c&c++反汇编与逆向分析学习笔记(2)--反汇编静态分析工具IDA
- 《Linux内核分析》(一)——反汇编一个简单的C程序并分析其汇编代码的执行
- 《linux内核分析》作业一:反汇编一个C语言程序并分析汇编代码执行过程
- Linux内核学习笔记之网卡驱动的详细分析
- Gloomy对Windows内核的分析(内核反汇编技术)
- Gloomy对Windows内核的分析(内核反汇编技术)
- Gloomy对Windows内核的分析(内核反汇编技术)
- Linux内核分析MOOC课程汇编分析
- Java学习之网络编程--InetAddress,InetSocketAddress
- 使用C#打印乘法口诀表
- poj_2240
- 如何将HTML代码通过PHP写入MYSQL?
- Vimer的Coding效率谈
- Linux内核分析 学习笔记之反汇编分析
- 线性判别分析 (Linear Discriminant Analysis) (一)
- Java中使用MemCached
- iOS开发:NSDate时区与格式化问题
- java学习--java性能优化
- 工厂方法模式Python版--雷锋依然在人间
- 现代经济感悟(4)-为什么一分钱一分货,两分货却要一块钱
- ABAP基础-数据更新至数据库操作解析
- 【好习惯】我的前端架构养成记之整洁的工作流