反汇编测试
2021/11/6 22:16:18
本文主要是介绍反汇编测试,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
反汇编测试
参考博文GDB调试汇编堆栈过程分析
测试代码
#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 - g week1307.c -o week1307 -m32
编译遇到问题
经过查询后得知需要安装multilib库:
sudo apt-get install gcc-multilib sudo apt-get install g++-multilib
使用gcc - g week1307.c -o week1302 -m32进行编译,使用gdb week1307进入gdb
进入之后先在main函数处设置一个断点,再run一下,使用disassemble指令获取汇编代码,用i(info) r(registers)指令查看各寄存器的值:
可见此时主函数的栈基址为0xffffd1f8,用x(examine)指令查看内存地址中的值,但目前%esp所指堆栈内容为0,%ebp所指内容也为0
结合display命令和寄存器或pc内部变量,做如下设置:display /i $pc,这样在每次执行下一条汇编语句时,都会显示出当前执行的语句。下面展示每一步时%esp、%ebp和堆栈内容的变化:
可见8被压入了栈中,同时esp减少了4
使用si命令,进入f函数,此时%esp,%ebp和堆栈的值为:
单步运行汇编代码
call指令将下一条指令的地址入栈,进入g函数
g函数运算完成后,ret返回f函数
f函数运算完成后,ret返回main函数
最终结果被写入eax寄存器中
f函数的汇编代码
f() | eip | ebp | esp | eax |
---|---|---|---|---|
endbr32 | 0x565561c6 | 0xffffd1f8 | 0xffffd1f0 | 0x56558fdc |
push %ebp | 0x565561ca | 0xffffd1f8 | 0xffffd1f0 | 0x56558fdc |
mov %esp %ebp | 0x565561cb | 0xffffd1f8 | 0xffffd1ec | 0x56558fdc |
sub $0x10 %esp | 0x565561cd | 0xffffd1fc | 0xffffd1ec | 0x56558fdc |
call 0x56556213 %esp | 0x565561d0 | 0xffffd1fc | 0xffffd1dc | 0x56558fdc |
add $0x2e07 %eax | 0x565561d5 | 0xffffd1fc | 0xffffd1dc | 0x565561d5 |
movl $0x2 0x4(%ebp) | 0x565561da | 0xffffd1fc | 0xffffd1dc | 0x56558fdc |
push 0x8(%ebp) | 0x565561e1 | 0xffffd1fc | 0xffffd1dc | 0x56558fdc |
call 0x565561ad |
0x565561e4 | 0xffffd1fc | 0xffffd1d8 | 0x56558fdc |
add $0x4 %esp | 0x565561e9 | 0xffffd1fc | 0xffffd1d8 | 0xb |
mov -0x4(%ebp) %edx | 0x565561ec | 0xffffd1fc | 0xffffd1dc | 0xb |
add %edx %eax | 0x565561ef | 0xffffd1fc | 0xffffd1dc | 0xb |
leave | 0x565561f1 | 0xffffd1fc | 0xffffd1dc | 0xd |
ret | 0x565561f2 | 0xffffd1f8 | 0xffffd1f0 | 0xd |
这篇关于反汇编测试的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南