linux反汇编分析,Linux内核分析 学习笔记之反汇编分析

之前一直零星地想去学习了解操作系统原理书也买了一大堆,但总没有个进度的压力,没能做出一个完整的系统。如今,网易云课堂里刚好有一个课程叫《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%ebp

movl%esp, %ebp

movl8(%ebp), %eax

addl$3, %eax

popl%ebp

ret

f:

pushl%ebp

movl%esp, %ebp

subl$4, %esp

movl8(%ebp), %eax

movl%eax, (%esp)

callg

leave

ret

main:

pushl%ebp

movl%esp, %ebp

subl$4, %esp

movl$8, (%esp)

callf

addl$1, %eax

leave

ret        我们从main函数开始理解吧,

main:

pushl%ebp ;帧指针入栈,便于以后恢复(此帧指针为调用该函数的帧指针)

movl%esp, %ebp ;设置当前的帧指针(始终指向栈底,便于对参数之类的进行寻址及以后的恢复)

subl$4, %esp ;分配空间,用于传递参数给int f(int x)

movl$8, (%esp) ;给分配的空间赋值

callf ;调用函数f

addl$1, %eax ;设置返回值(当返回参数较小时,能够用32位eax保存的,否则可能用eax表示指针,指向返回值)

leave ;相当于 movl %ebp, %esp popl %ebp

ret ;返回函数调用的下一句        再看看函数g吧

g:

pushl%ebp

movl%esp, %ebp

movl8(%ebp), %eax ;主要是这句,取出输入参数,具体参看下图

addl$3, %eax

popl%ebp

ret

0818b9ca8b590ca3270a3433284dd417.png

看到图片便不难理解主要是取出传入参数进行计算。至于函数f,略……

由于内容比较简单,故到此为止,也做为我此次学习的开始吧^_^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值