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所指的位置

原文地址:https://www.cnblogs.com/20199305yizihan/p/11568626.html