2022-2023-1 20222809《Linux内核原理与分析》第二周作业

2022-2023-1 20222809《Linux内核原理与分析》第二周作业,第1张

实验:反汇编一个简单的C程序 1.首先创建main.c文件,并且按照实验楼要求编写c程序

 这里的参数按照学号修改

2.对所生成的main.c进行编译,得到main.s文件

 使用

对其带“.”的辅助信息进行消除得到下面纯净的汇编代码

3.汇编语句分析

首先分析最先执行的main代码:

pushl    %ebp把EBP寄存器也即栈基指针的值压栈
movl    %esp,%ebp保存栈基指针的内容,然后把栈顶指针拷贝给栈基指针
subl    ,%esp栈顶指针下以4个单位,分配一个单元
movl   , (%esp)将数值28存储到刚刚分配的个单元
call    f调用f函数
add    ,%eax将数值9放到压栈前栈基指针的下一位置
leave撤销执行main函数建立的堆栈
ret函数返回

然后是f函数:

pushl    %ebpEBP寄存器的值压栈
movl    %esp, %ebp保存栈基指针的内容,然后把栈顶指针拷贝给栈基指针
subl    ,%esp栈顶指针下以4个单位,分配一个单元
movl    8(%ebp), %eaxEBP寄存器加8
movl   %eax,( %esp)将EAX寄存器中存储的立即数8放到ESP寄存器现在所指位置上
call g调用函数g
leave撤销执行main函数建立的堆栈
ret函数返回

 最后是g函数:

pushl    %ebpEBP寄存器的值压栈
movl    %esp, %ebp保存栈基指针的内容,然后把栈顶指针拷贝给栈基指针
movl    8(%ebp), %eaxEBP寄存器加8,指向标号5的位置,将标号5的内容放到EAX寄存器中
addl    09,%eax把立即数2809加到EAX寄存器中
pool   %ebp恢复函数f的函数调用栈基指针
ret函数返回
4.总结 

关于寄存器

这次实验在虚拟机中编写了一个简单地C语言代码,并且将它转换成汇编语句,分析汇编语句执行的过程来进一步了解计算机时如何工作的。通过汇编语言来接近机器语言,充分体会计算机在执行过程中所执行的的最“朴素”的语言。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/3002556.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存