2019-2020-1 20199305《Linux内核原理与分析》第二周作业
C程序的反汇编
(一)实验截图
-
复制所需要的C程序到“剪切板”
-
在虚拟机环境下粘贴过来
-
接下来进行反汇编,通过输入gcc -S -o main.s main.c -m32得到32位的x86环境中
的汇编代码文件,然后删除.开头的语句,获得“干净”的代码
(二)汇编简析
这是一个简单的的C程序,运算过程中有两次调用,所以汇编语言中使用了call
-
pushl %ebp
ESP地址减4,EBP寄存器的数据存入栈顶
-
movl %esp,%ebp
EBP指向ESP的位置
-
movl $8(%ebp),%eax
EBP寄存器的地址加上立即数(常数)8,将它指向的值放入EAX寄存器(变址寻址)
-
subl $4,%esp
堆栈减4
-
add $3,%eax
EAX寄存器中的值加上立即数3
-
movl %eax,(%esp)
将EAX寄存器中存储的值存放到ESP所指的位置