反汇编测试

基础操作

编译为32位代码

先使用指令sudo apt-get install libc6-dev-i386安装必备库。
然后可以使用gcc - g example.c -o example -m32来将C代码编译为32位可执行程序。

gdb

b main在主函数设置断点。
disassemble反汇编当前函数的机器码。
i rinfo registers查看当前寄存器的值。
si汇编级的指令,步入下一条(进入函数)汇编代码。
ni汇编级的指令,继续下一条(不进入函数)汇编代码。
display /i $pc通过PC的值指向是下一条机器码的原理,实现显示当前执行的指令。

通过gcc得到了汇编代码:

测试

gdb调试main文件

disassemble


push:

mov:

call:

mov:

ret:

add:

push:

call:

sub:

call:

mov:

ret:

add:

movl:

pushl:

call:

endbr32:

push:

mov:

call:

mov:

ret:

add:

mov:

add:

pop:

ret:

add:

mov:

add:

leave:

ret:

add:

add:

leave:

ret:

libc:

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

posted @ 2021-11-06 19:27  叶家星  阅读(39)  评论(0编辑  收藏  举报