反汇编测试

反汇编测试

1. 编译汇编代码

  • 代码:

  • 汇编代码编译
    输入gcc -S -o main.s main.c 将下面c程序”week0303学号.c“编译成汇编代码

2. 使用gdb跟踪汇编代码

  • 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编

  • 产生上图所示的报错,因为Ubuntu是64位的
    解决方法:执行命令:sudo apt-get install gcc-multilib g++-multilib modoule-assistant安装相应文件即可解决。

  • 使用gdb example指令进入gdb调试器:

  • 进入后,先在main函数处设置一个断点,run一下。

  • 使用disassemble指令获取汇编代码。

  • info registers指令查看各寄存器的值

  • 可见此时主函数的栈基址为0xffffd0cc,用x(examine)指令查看内存地址中的值

  • 执行命令display /i $pc,这样在每次执行下一条汇编语句时,都会显示出当前执行的语句

  • 执行命令si打印下一条要执行的语句,i r查看寄存器值,x/na 查看栈的情况








  • eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和栈的变化情况:

指令 eip(rip) ebp(rbp) esp(rsb) eax(rax) 堆栈
push 0x565561f3 0x0 0xffffd0cc 0xf7fb5808 0xf7deaee5
mov 0x565561f7 0x0 0xffffd0cc 0xf7fb5808 0xf7deaee5 0x1
call 0x565561f8 0x0 0xffffd0c8 0xf7fb5808 0x0 0xf7deaee5 0x1
mov 0x565561fa 0xffffd0c8 0xffffd0c8 0xf7fb5808 0x0 0xf7deaee5 0x1 0xffffd164
ret 0x56556213 0xffffd0c8 0xffffd0c4 0xf7fb5808 0x565561ff 0x0 0xf7deaee5 0x1
add 0x56556216 0xffffd0c8 0xffffd0c4 0x565561ff 0x565561ff 0x0 0xf7deaee5 0x1
push 0x565561ff 0xffffd0c8 0xffffd0c8 0x565561ff 0x0 0xf7deaee5 0x1 0xffffd164
call 0x56556204 0xffffd0c8 0xffffd0c8 0x56558fdc 0x8 0x0 0xf7deaee5 0x1
posted @ 2021-11-06 11:59  修勾  阅读(74)  评论(0编辑  收藏  举报