反汇编测试
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-05-29DataGrip使用ssh连接数据库的操作流程
- 2024-05-28SpringBoot3.2更新声明!
- 2024-05-28中外程序员到底有啥区别?
- 2024-05-25外企也半夜发布上线吗?
- 2024-05-24鸿蒙原生应用再新丁!芒果TV 入局鸿蒙
- 2024-05-22基本概念
- 2024-05-22检索数据
- 2024-05-22排序数据
- 2024-05-22基础过滤数据
- 2024-05-22通过逻辑操作符过滤数据