2023-2024-1 20232819 祝浩宣《Linux内核原理与分析》第二周作业

一.AI学习

二、完成实验楼实验

1)创建文件并编写程序

2)把.c文件编译成一个汇编代码(.s文件),使用如下命令:

gcc –S –o main.s main.c -m32

3)输入g/\.s*/d可以删除所有以“.”打头的字符串,获得“干净”的汇编代码。

三、分析汇编代码

(1)汇编代码分别对应3个函数:main函数、f函数、g函数。

(2)四个寄存器及其作用:

        ebp:堆栈基指针,该指针永远指向系统栈最上面一个栈帧的底部。

        esp:堆栈底指针,永远指向系统栈最上面一个栈帧的顶部。

        eip:指令指针。

        eax:累加寄存器。

(3)步骤分析

1、程序从main函数开始执行也就是从第十八行开始执行

2、pushl %ebp:把EBP寄存器的值压栈

3、movl  %esp,%edp:将EBP寄存器指向标号1的位置

4、subl $4,%esp:把ESP寄存器-4,实际上ESP向下移动一个标号,指向2的位置

5、movl $9,(%esp):把数9放入ESP寄存器指向的标号2的位置

6、call f:跳转到函数 f,并且执行

7、movl  %esp,%edp:初始化函数自己的函数调用堆栈空间。

8、subl $4,%esp:ESP-4指向下一个位置栈空间的标号5

9、movl 8,(%esp),%eax:把立即数8放到EAX寄存器中。

10、movl %eax,(%esp):把EAX寄存器中存储的立即数8放到ESP寄存器现在所指的位置5.

11、call g:跳转到函数 g,并且执行

12、movl  %esp,%edp:初始化函数自己的函数调用堆栈空间。

13、movl  8(%ebp),%eax

14、addl $42,%eax

14、popl %ebp

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值