2023-2024-1 20232806 安星宇《Linux内核原理与分析》第二周作业

实验一:反汇编一个简单的C程序

1.实验过程

1)创建main.c文件
在这里插入图片描述
2)输入以下内容,并使用ctrl+s保存
在这里插入图片描述
3)使用以下命令编译成汇编代码,生成main.s文件
在这里插入图片描述
4)使用cat命令查看main.s的内容
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5)使用dd命令删除注释信息,简化后的代码如下
在这里插入图片描述
6)对该段代码进行分析
1.g函数
2:EBP寄存器的值压栈
3:EBP寄存器指向标号7的位置
4:EBP寄存器加8,指向标号5的位置,将标号5的内容放到EAX寄存器中
5:把立即数15加到EAX寄存器中
6:把标号7的内容放回到EBP寄存器
7:函数返回
2.f函数
9:EBP寄存器的值压栈
10:EBP寄存器指向标号4的位置
11:ESP寄存器减4,指向标号5的位置
12:EBP寄存器加8
13:将EAX寄存器中存储的立即数8放到ESP寄存器现在所指位置上
14:调用函数g
15:撤销f函数的堆栈
16: 函数返回
3.main函数
18:EBP寄存器的值压栈
19:EBP寄存器指向标号1的位置
20:ESP寄存器向下移动一个标号
21:把立即数7放入ESP寄存器指向的位置
22:EIP寄存器跳转到f函数的位置
23:EAX寄存器加立即数3
24: 撤销main函数的堆栈
25: 函数返回

2.遇到的问题及解决方案

1)在使用gcc –S –o main.s main.c -m32命令时,需要注意-S要大写,否则汇编生成的main.s会出现乱码。
2)在安装vim、gcc等命令时,需要加上sudo apt选项,否则提示权限不够。

3.实验总结

        通过本次的实验,我掌握了在Linux环境中反汇编C语言程序的方法,重点学会了gcc命令的使用,gcc命令使用时通常搭配一些参数,如-S、-c等。同时也对x86汇编指令有了一定的了解。x86汇编指令是对计算机底层运行原理的一次深入探索,它让我对计算机的工作方式和指令级别的操作有了更深入的了解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

20232806安星宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值