反汇编测试
1.通过输入gcc -S -o main.s main.c 将下面c程序”week0303学号.c“编译成汇编代码
int g(int x){
return x+3;
}
int f(int x){
int i = 学号后两位;
return g(x)+i;
}
int main(void){
return f(8)+1;
}
Step1:进入gdb模式,在main函数处设置行断点,run后输入disassemble,得到汇编代码:
用i(info) r(registers)指令查看各寄存器的值:
可知主函数的栈基址为0xffffd15c,使用x(examine)指令查看内存地址中的值
输入命令display /i $pc,符号=>后跟着的是系统正在执行的命令,输入si,用i r查看这条命令执行结束后寄存器的值的变化,然后用x/4a SP的值看栈的值:
之后一直重复si i r x/4a esp的值 直到结束
中每一条语句引起的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况如下: