“Linux内核分析”实验报告

Linux内核分析:实验一

潘俊洋 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

计算机体系结构与程序运行过程

现代计算机大都采用的是“冯.诺依曼”体系结构,它的核心思想是:程序存储,指令和数据不加区分的放在一个存储器中。由指令指针寄存器保存着下一条将要执行指令的地址,这个寄存器在32位系统中叫eip,64位系统中叫rip。

指令是用二进制编码的,难于记忆。为了更有效的编写程序,人们就发明了汇编语言,它是对二进制指令的一种简单映射。平常我们所写的程序都需要编译成二进制,才能被机器执行。

 

实验截图:

1.开始的截图

 

2.mian.s的代码

 

3.反汇编代码

 

 

代码分析:

从main函数开始:

pushl %ebp movl %esp, %ebp

这两条指令的意思是保存栈基指针的内容,然后把栈顶指针拷贝给栈基指针。也就是把栈基指针压栈,然后使栈基指针指向栈顶指针。

这样做使得函数保存了调用之钱的状态信息,便于函数返回。函数调用堆栈逻辑上是由多个堆栈叠加起来的。

subl $4, %esp movl $23, (%esp)

这两条指令的意思是栈顶指针下以4个单位,分配了一个单元,第二条指令将数值23存储到刚刚分配的个单元中。

所以这两条指令的作用是将数值23压入堆栈。

call f

这是一条函数调用指令。call f调用f函数,首先把指令指针寄存器EIP的内容(即下一条指令的位置)保存到堆栈中,然后把函数f函数的起始地址拷贝给EIP寄存器。

pushl %ebp

movl %esp, %ebp

subl $4, %esp

movl 8(%ebp), %eax

movl %eax, (%esp)

call g 现在执行的是f函数。前两条指令和main中的前两条指令含义相同。对于第4条指令指汇编程序的变址寻址方式,

它的含义是将栈基指针的内容加上8对应的存储单元(即23所在的存储单元)的内容传送给累加寄存器EAX。下一条指令再把EAX内容拷贝给栈顶指针所指的位置。

call g调用g函数。

popl %ebp

这条指令相当于:movl (%esp),%ebp add $4,%esp。

实现将之前压入栈的栈基指针EBP的内容出栈到EBP中。

Leave:恢复堆栈状态

ret返回

 

 

总结:通过分析C程序的反汇编代码,对程序在计算内部的执行过程有了一个直观的认识,在函数调用中,栈起了举足轻重的作用,

整个程序的运行过程其实就是每次从 eip 指向的地址取出一条指令执行,然后eip自增很多计算机安全方面的漏洞都直接间接的利用了栈。

 

转载于:https://www.cnblogs.com/20135230pjy/p/5216600.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴听到您完成了Linux内核编译实验。以下是一份可能的实验报告: 实验名称:Linux内核编译 实验目的:学习Linux内核编译的基本步骤和方法,了解内核编译的相关知识和技能。 实验环境:Ubuntu 18.04 LTS操作系统Linux内核源代码。 实验步骤: 1. 下载Linux内核源代码,解压缩到本地目录。 2. 安装必要的编译工具和依赖库,如gcc、make、libncurses-dev等。 3. 进入内核源代码目录,执行make menuconfig命令,进入内核配置界面。 4. 在内核配置界面中,根据实验要求选择需要编译的内核模块和功能,保存配置文件。 5. 执行make命令,开始编译内核。编译过程可能需要一段时间,视电脑性能和内核配置而定。 6. 编译完成后,执行make install命令,将编译好的内核安装到系统中。 7. 重启系统,选择新编译的内核启动。 实验结果: 经过以上步骤,我们成功地编译了一个新的Linux内核,并将其安装到系统中。在启动时,我们可以选择新内核来运行系统。通过实验,我们了解了内核编译的基本流程和方法,掌握了内核配置和编译的技能。 实验总结: Linux内核编译是Linux系统开发和维护的重要技能之一,对于深入理解Linux系统的运行机制和优化性能具有重要意义。通过本次实验,我们不仅学习了内核编译的基本步骤和方法,还了解了内核配置和编译的相关知识和技能。希望这次实验能够对我们今后的学习和工作有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值