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 ...
随机推荐
- 《只是为了好玩:Linux之父林纳斯自传》
<只是为了好玩:Linux之父林纳斯自传> 基本信息 作者: (美)Linus Torvalds David Diamond 译者: 陈少芸 出版社:人民邮电出版社 ISBN:978 ...
- Hadoop从伪分布式到真正的分布式
对这两天学习hadoop的一个总结,概念就不提了.直接说部署的事,关于如何部署hadoop网上的资料很多, 比较经典的还是Tim在IBM developworks上的系列文章 http://www.i ...
- 【体系结构】Oracle参数介绍
[体系结构]Oracle参数介绍 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩ ...
- nyoj 211 Cow Contest
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=211 思路:我的思路是对每一个点,向上广搜,向下广搜,看总共能不能搜到n-1个结点,能,表 ...
- nyoj 203 三国志 dijkstra+01背包
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=203 思路:先求点0到每个点的最短距离,dijkstra算法,然后就是01背包了 我奇怪的 ...
- c++ initialize_list
看到这么一个东西,可以实现花括号( "{" "}" )初始化容器类. 使用时需包含头文件 #include <initialize_list> 我们 ...
- C++ string的大小写转换
将一个string转换成大写或者小写,是项目中经常需要做的事情,但string类里并 没有提供这个方法.自己写个函数来实现,说起来挺简单,但做起来总让人觉得不方便.打个比方:早上起来想吃个汉堡,冰箱里 ...
- mac下 ssh免密码登陆设置
由于mac os 是基于unix的操作系统终端和linux非常类似,所以不用借助类似于windows下的putty 和CRT工具即可远程登陆linux服务器,只需简单地3步即可免密码ssh远程. 1 ...
- 我所理解的 惠普云 (HP Cloud)
HP (惠普)于2014年5月27日宣布了它的新的云产品线 HP Helion,并宣布在接下来的两年时间内向该产品线投资10亿美金.应该说这是一笔很大的投入,充分显示了HP 在云这个领域的决心.本文试 ...
- 对于大学4年的反思(续),记我的ThoughtWorks面试
之前我写了一篇对于大学四年的反思,时隔一个月,为什么我这么快就要来写这篇续章呢?主要有两个原因,第一是感谢静子姐姐,记得知乎上有个回答里面说过人生需要有贵人的帮助,遇到贵人是一件很幸运的事情.我想,静 ...