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)的值和栈的变化情况
posted @ 2021-11-06 13:31  20191302董佳帅  阅读(18)  评论(0编辑  收藏  举报
/* 看板娘 */