20191302反汇编测试
反汇编测试
测试代码
#include<stdio.h>
int g(int x){
return x+3;
}
int f(int x){
int i = 02;
return g(x)+i;
}
int main(void){
return f(8)+1;
}
用gcc在64位机器上编译一个32位的程序,遇到报错

- 解决办法:安装multilib库
sudo apt-get install gcc-multilib
sudo apt-get install g++-multilib

使用gcc - g week20191302.c -o week1302 -m32进行编译,使用gdb week1302进入gdb

在main函数设置断点,再run一下,使用disassemble指令获取汇编代码,用i r指令查看各寄存器的值:


可见此时主函数的栈基址为0xffffd108,用x查看其值为0。

使用指令display /i $pc,单步执行并显示%esp和%ebp的值。


- 可见8被压入了栈中,同时esp减少了4
使用si命令,进入f函数

单步运行汇编代码

call指令将下一条指令的地址入栈,进入g函数


g函数运算完成后,ret返回f函数


f函数运算完成后,ret返回main函数

最终结果被写入eax寄存器中


f函数的汇编代码

- 在纸上画出f中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况


浙公网安备 33010602011771号