ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

反汇编测试

2021-11-05 03:00:33  阅读:179  来源: 互联网

标签:0x80491b1 FP 0xffffd3bc esp ebp 反汇编 测试 0xffffd3c8


反汇编测试

任务代码

int g(int x){
    return x+3;
}
int f(int x){
     int i = 13;
    return g(x)+i;
}
int main(void){
    return f(8)+1;
}

任务过程

  • 使用gcc -g -no-pie -fno-pic -m32 week030320191323.c -o week030320191323指令在64位的机器上产生32位汇编并去除<__x86.get_pc_thunk.ax>,然后使用gdb week030320191323指令进入gdb调试:

  • 设置main函数b main断点并运行,使用disass指令获取汇编代码,用i r指令查看所有寄存器的值:

  • 使用display指令查看各寄存器中的值,以及当前$eip中存储地址所对应的指令

main函数中

  • main函数将FP压栈push %ebp,让FP指向保存的FPmov %esp, %ebp,同时将即将调用函数f的参数x = 8推送到堆栈中push $0x8

  • 调用函数fpush eip ; jump 0x8049185

f函数中

  • 获取汇编代码

  • 验证调用函数地址是否为期望函数endbr32

  • f函数将FP压栈push %ebp,让FP指向保存的FPmov %esp, %ebp

  • 向下移动SP为自动局部变量i =13分配空间,同时分配临时工作空间tempsub $0x10,%esp

  • 将自动局部变量 i = 13存入栈中movl $0xd,-0x4(%ebp),并将所获得参数x作为下一个调用函数的参数继续传递

  • 调用函数gpush eip ; jump 0x8049176

g函数中

  • 获取汇编代码

  • 验证调用函数地址是否为期望函数endbr32

  • g函数将FP压栈push %ebp,让FP指向保存的FPmov %esp, %ebp

  • 将参数x = 8放入%eax中mov 0x8(%ebp),%eax,运算x + 8add $0x3,%eax

  • 将FP复制到SP中,弹出堆栈到FPpop %ebp(因为SP本就指向保存FP,所有没有执行leave),返回调用f

f函数中

  • 清除堆栈参数恢复原始状态add $0x4, %esp恢复现场

  • 将i = 13赋值到%edx中mov -0x4(%ebp),%edx,计算11 + 13add %edx,%eax

  • 将FP复制到SP中,弹出堆栈到FPleave,返回调用mainret

main函数中

  • 清除堆栈参数恢复原始状态add $0x4, %esp恢复现场

  • 计算24 + 1add $0x1,%eax

  • 将FP复制到SP中,弹出堆栈到FPleave,返回调用ctr0ret

f函数中寄存器和堆栈值的变化情况

指令 eip ebp esp eax 堆栈(高->低)
endbr32 0x8049185 0xffffd3c8 0xffffd3c0 -134551544 0x80491b1
push %ebp 0x8049189 0xffffd3c8 0xffffd3bc -134551544 0x80491b1,0xffffd3c8
mov %esp,%ebp 0x804918a 0xffffd3bc 0xffffd3bc -134551544 0x80491b1,0xffffd3c8
sub $0x10,%esp 0x804918c 0xffffd3bc 0xffffd3ac -134551544 0x80491b1,0xffffd3c8,0xd
movl $0xd,-0x4(%ebp) 0x804918f 0xffffd3bc 0xffffd3ac -134551544 0x80491b1,0xffffd3c8,0xd
pushl 0x8(%ebp) 0x8049196 0xffffd3bc 0xffffd3a8 -134551544 0x80491b1,0xffffd3c8,0xd,0x8
call 0x8049176 0x8049199 0xffffd3bc 0xffffd3a4 -134551544 0x80491b1,0xffffd3c8,0xd,0x8,0x804919e
add $0x4,%esp 0x804919e 0xffffd3bc 0xffffd3ac 11 0x80491b1,0xffffd3c8,0xd
mov -0x4(%ebp),%edx 0x80491a1 0xffffd3bc 0xffffd3ac 11 0x80491b1,0xffffd3c8,0xd
add %edx,%eax 0x80491a4 0xffffd3bc 0xffffd3ac 24 0x80491b1,0xffffd3c8,0xd
leave 0x80491a6 0xffffd3c8 0xffffd3c0 24 0x80491b1
ret 0x80491a7 0xffffd3c8 0xffffd3c4 24 NULL

标签:0x80491b1,FP,0xffffd3bc,esp,ebp,反汇编,测试,0xffffd3c8
来源: https://www.cnblogs.com/WANGYUHAN/p/15511425.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有