2019-2020-1 20199305《Linux内核原理与分析》第二周作业

C程序的反汇编

(一)实验截图

  • 复制所需要的C程序到“剪切板”

    2019-2020-1 20199305《Linux内核原理与分析》第二周作业
  • 在虚拟机环境下粘贴过来

    2019-2020-1 20199305《Linux内核原理与分析》第二周作业

  • 接下来进行反汇编,通过输入gcc -S -o main.s main.c -m32得到32位的x86环境中

    的汇编代码文件,然后删除.开头的语句,获得“干净”的代码

    2019-2020-1 20199305《Linux内核原理与分析》第二周作业
    2019-2020-1 20199305《Linux内核原理与分析》第二周作业
    2019-2020-1 20199305《Linux内核原理与分析》第二周作业

(二)汇编简析

这是一个简单的的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所指的位置