一、学习云班课中第二周视频,学习汇编指令
二、完成实验一 通过反汇编一个简单的C程序
在实验楼中找到Linux内核分析配套实验
为了使代码方便下载,在Code下进行编码
通过vi main.c查看main.cb并输入程序
在实验楼剪切板中复制代码,并对其进行简单修改
在vim中填写完成后,应当用Esc使其保持NORMAL状态,并输入 “:wq” 保存并退出
并使用$ gcc –S –o main.s main.c -m32
使main.c编译成32位的汇编程序
最后通过vi main.s查看编译结果如图:
可以使用快捷键“dd”删除光标所在行,得到更纯净的汇编代码
g函数:
2:EBP寄存器的值压栈
3:EBP寄存器指向标号7的位置
4:EBP寄存器加8,指向标号5的位置,将标号5的内容放到EAX寄存器中
5:把立即数15加到EAX寄存器中
6:把标号7的内容放回到EBP寄存器
7:函数返回
9:EBP寄存器的值压栈
10:EBP寄存器指向标号4的位置
11:ESP寄存器减4,指向标号5的位置
12:EBP寄存器加8
13:将EAX寄存器中存储的立即数8放到ESP寄存器现在所指位置上
14:调用函数g
15:撤销f函数的堆栈
16: 函数返回
18:EBP寄存器的值压栈
19:EBP寄存器指向标号1的位置
20:ESP寄存器向下移动一个标号
21:把立即数7放入ESP寄存器指向的位置
22:EIP寄存器跳转到f函数的位置
23:EAX寄存器加立即数3
24: 撤销main函数的堆栈
25: 函数返回
三、在实验中遇到的问题及解决办法
1、在输入完main.c之后,发现仅仅输入命令“:wq”无法退出,无法使其变为NORMAL状态。在查找信息之后,发现我们可以使用Ese让其保持在NORMAL状态,再输入“:wq”后可以保存并退出。
2.在查看main.s中,删除前面带“.”的行,无法直接删除,我通过“dd”删除光标所在行。并发现可以使用g/.s*/d命令获得更纯净的汇编代码。