反汇编(必做)
0、前言
-
想要执行
gcc - g wk9_20191314.c -o 9week -m32命令时显示找不到必要文件![]()
说明缺少库函数,使用如下命令安装库函数:
sudo apt-get install libc6-dev-i386 -
用到的指令
b main:设置行断点,在main函数处设置断点 i r:查看当前寄存器的值 disassemble:反汇编当前的函数机器码 si:汇编命令,下一步 display /i $pc:显示当前执行的指令 x 0xffffffff:显示指定地址的值 -
输入老师提供的代码,并使用
sudo gcc -g wk9_20191314.c -o 20191314_xhr_disassemble -m32反汇编该代码,并用gdb 20191314_xhr_disassemble进入调试,使用b main设置main函数为行断点:![]()
1、过程
- 设置行断电后,运行程序一步,输入
disassemble进行反汇编:

-
输入
si命令,查看寄存器的值和对应内存中的值:![]()
此时地址为0x565561f3
下一步1
![]()
执行了push bep的操作
下一步2
![]()
执行了mov命令
下一步3
![]()
执行了call命令
下一步4
![]()
执行了mov命令
下一步5
![]()
下一步6
![]()
执行了add命令
下一步7
![]()
继续add
下一步8
![]()
返回f()函数的值,执行了call命令
下一步9
![]()
此时转到了f()函数
下一步10
![]()
继续在f()函数,在ebp上执行了push
下一步11
![]()
在f()函数,执行了从ebp到esp是mov命令
下一步12
![]()
在f()函数,执行了esp上的sub操作
下一步13
![]()
在f()函数上的call命令
下一步14
![]()
eax到esp的mov命令
下一步15
![]()
下一步16
![]()
f()函数上,堆栈eax上的add操作
下一步17
![]()
f()函数中堆栈ebp上的movl
下一步18
![]()
f()函数中ebp堆栈的pushl操作
下一步19
![]()
最后一步,执行到返回值g(x)+i
3、分析
-
基本信息
-
寄存器的功能
eax:累加器,加乘运算的缺省寄存器 esp:存放当前线程的栈的栈顶指针 ebp:存放当前线程的栈的栈底指针 eip:存放下一CPU指令的内存地址
-





















