20145302张薇 GDB调试汇编堆栈过程分析
GDB堆栈跟踪与汇编调试
堆栈跟踪
源代码
使用
gcc - g example.c -o example -m32
指令在64位的机器上产生32位汇编,然后使用gdb example
指令进入gdb调试器:
- 在main函数处设置一个断点,再run运行
- 使用
disassemble
获取汇编代码 用
info registers
指令查看各寄存器的值
- 由上图知此时主函数的栈基址为0xbffff324
用
x 0xbffff324
指令查看内存地址中的值
使用
display /i $pc
:在每次执行下一条汇编语句时,都会显示出当前执行的是哪条语句
- 下面展示每一步时%esp、%ebp和堆栈内容的变化:
- call指令将下一条指令的地址入栈:
- 将上一个函数的基址入栈,从当前%esp开始作为新基址:
先为传参做准备:
实参的计算在%eax中进行:
- 实参入栈,call指令将下一条指令的地址入栈:
- 计算short+int:
pop %ebp指令将栈顶弹到%ebp中,同时%esp增加4字节:
ret指令将栈顶弹给%eip:
- 函数f修改了%esp,使用leave指令恢复
leave指令先将%esp对其到%ebp,然后把栈顶弹给%ebp:
执行过程中%ebp、%esp、堆栈值的变化
指令 | %esp | %ebp | 堆栈 |
---|---|---|---|
movl $0x8,(%esp) | 0xbffff324 | 0xbffff328 | 0x0 |
call 0x80483c4 | 0xbffff324 | 0xbffff328 | 0x8 0x0 |
push %ebp | 0xbffff320 | 0xbffff328 | 0x80483ee 0x8 0x0 |
mov %esp,%ebp | 0xbffff31c | 0xbffff328 | 0xbffff328 0x80483ee 0x8 0x0 |
mov 0x804a014,%eax | 0xbffff318 | 0xbffff31c | 0x8048409 0xbffff328 0x80483ee 0x8 0x0 |
call 0x80483b4 | 0xbffff318 | 0xbffff31c | 0xa 0x8048409 0xbffff328 0x80483ee 0x8 0x0 |
push %ebp | 0xbffff314 | 0xbffff31c | 0x80483da 0xa 0x8048409 0xbffff328 0x80483ee 0x8 0x0 |
mov %esp,%ebp | 0xbffff310 | 0xbffff31c | 0xbffff31c 0x80483da 0xa 0x8048409 0xbffff328 0x80483ee 0x8 0x0 |
Pop %ebp | 0xbffff310 | 0xbffff310 | 0xbffff31c 0x80483da 0xa 0x8048409 0xbffff328 0x80483ee 0x8 0x0 |
ret | 0xbffff314 | 0xbffff31c | 0x80483da 0xa 0x8048409 0xbffff328 0x80483ee 0x8 0x0 |
leave | 0xbffff318 | 0xbffff31c | 0x8048409 0xbffff328 0x80483ee 0x8 0x0 |
ret | 0xbffff320 | 0xbffff328 | 0xbffff328 0x80483ee 0x8 0x0 |
mov 0x80484d0,%edx | 0xbffff324 | 0xbffff328 | 0x8 0x0 |
add $edx,%eax | 0xbffff324 | 0xbffff328 | 0x0 |
ret | 0xbffff32c | 0x0 |
gdb小使用
使用gdb的bt/frame/up/down指令动态查看调用栈帧的情况
20145302张薇 GDB调试汇编堆栈过程分析的更多相关文章
- GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...
- 20145212——GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...
- 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析
20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...
- 赵文豪 GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 使用gdb调 ...
- 20145337 GDB调试汇编堆栈过程分析
20145337 GDB调试汇编堆栈过程分析 测试代码 #include<stdio.h> short addend1 = 1; static int addend2 = 2; const ...
- 20145208 GDB调试汇编堆栈过程分析
20145208 GDB调试汇编堆栈过程分析 测试代码 #include<stdio.h> short addend1 = 1; static int addend2 = 2; const ...
- 20145218 GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 虚拟机中分析过程 输入gcc - g example.c -o example -m32指令在64位机器上产生32位汇编,但出现以下错误: 这时需要使用sudo apt-g ...
- 20145236 GDB调试汇编堆栈过程分析
GDB调试汇编堆栈过程分析 首先需要输入sudo apt-get install libc6-dev-i386安装一个库才能产生汇编代码,然后输入gcc - g example.c -o exampl ...
- 20145312 GDB调试汇编堆栈过程分析
20145312 GDB调试汇编堆栈过程分析 参考资料 卢肖明同学的博客:<GDB调试汇编堆栈过程分析>: http://www.cnblogs.com/lxm20145215----/p ...
随机推荐
- 使用Android studio创建的AIDL编译时找不到自定义类的解决办法
使用AS创建ADIL文件时AS会在main文件夹下给我们生成一个aidl文件夹和一个相同包名的包,通常我们会把所有和ADIL相关的类或文件放在这个包下,但是如果存在自定义的类时,程序编译时无法通过,提 ...
- Navicat for Mysql远程连接数据时报(1045错误)Access denied for user 'root'@'localhost' (using password yes);
原因:用户访问被拒绝,更改用户赋予密码即可 mysql命令行执行语句如下 //使用mysql,读取表信息 //更改用户赋予登录密码 //更新权限 注意点:使用flush privileges是为了刷新 ...
- 用memoization优化递归算法[JS/PHP实现]
递归函数,通过把一个大而复杂问题简化为许多但规模较小的问题,以同一个相似模式来计算,降低了解题的难度:通过调用自身函数,极大地减少了函数代码量的优点而为开发者喜爱.但因其不断调用自身函数开辟新栈,且大 ...
- 集算器协助java处理多样性数据源之MongoDB
MongoDB不支持join,其官网上推荐的unity jdbc可以把数据取出来进行二次计算实现join运算,但这些join.group.函数.表达式等高级功能都是收费版才有,而且即使是收费版本,对子 ...
- 系统调用wait、waitpid和exec函数
本文介绍了Linux下的进程的一些概念,并着重讲解了与Linux进程管理相关的重要系统调用wait,waitpid和exec函数族,辅助一些例程说明了它们的特点和使用方法. 1.7 背景 在前面的文章 ...
- Design Pattern :Factory and Reflect in java
interface page { void Render(); } class pageA implements page { @Override public void Re ...
- Storm calculate pv
本题其实就是storm的wordcout,需要把一个gz压缩的文件读取,并使用storm计算其pv. 样本 数据: 存储为accesslog.gz 我把它加载到我的虚拟机中/mnt/下. 没有使用tr ...
- 【ASP.NET 问题】System.InvalidOperationException: 对象的当前状态使该操作无效 【大量表单数据提交】错误解决
出现的问题描述: 当页面的数据量比较大时,出现异常,详细信息: System.InvalidOperationException: 对象的当前状态使该操作无效 问题的原因:出现这个异常的原因是因为微软 ...
- tarjan算法求桥双连通分量 POJ 3177 Redundant Paths
POJ 3177 Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12598 Accept ...
- 简单的抓取淘宝关键字信息、图片的Python爬虫|Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)
Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇) 淘宝改字段,Bugfix,查看https://github.com/hunterhug/taobaoscrapy.git 由于Gith ...