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 ...
随机推荐
- Jmeter调试工具---Debug Sampler
一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug Sampler,它有三个选项:JMeter properties,JMeter v ...
- gerrit添加新用户
默认gerrit的web服务端口为8080,通过apache的反向代理就可以使用标准的80(HTTP)来访问gerrit的web界面,在apache的配置文件httpd.conf添加如下反向代理和HT ...
- android中实现view可以滑动的六种方法续篇(一)
承接上一篇,如果你没有读过前四章方法,可以点击下面的链接: http://www.cnblogs.com/fuly550871915/p/4985053.html 下面开始讲第五中方法. 五.利用Sc ...
- IE8下解决position:flxed无效的问题
只需将文档类型声明改成如下方式即可 <!DOCTYPE html>
- Ubuntu14.04安装中文输入法以及解决Gedit中文乱码问题[转载]
转载自:http://www.cnblogs.com/zhcncn/p/4032321.html 写在前面:解决gedit 在txt文件格式出现乱码的问题,在我自己的操作中是需要把系统设置成中文显示环 ...
- linux搭建一个配置简单的nginx反向代理服务器 2个tomcat
1.我们只要实现访问nginx服务器能跳转到不同的服务器即可,我本地测试是这样的, 在nginx服务器里面搭建了2个tomcat,2个tomcat端口分别是8080和8081,当我输入我nginx服务 ...
- noip2008普及组4题题解-rLq
(啊啊啊终于补到了今天的作业了) 本题地址:http://www.luogu.org/problem/show?pid=1058 题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣 ...
- 使用Loadrunner进行http接口压力测试
业务描述: 在业务系统里进行查询操作,查询的结果是通过请求http接口,从系统中处理并将结果以json字符串返回. 本文就讲述使用Loadrunner对此类接口进行压力测试并记录相关的性能指标数据: ...
- Windows环境中Openfire与Spark安装与配置指南
安装软件: openfire3.9.3 spark2.6.3 安装环境: WindowsXP JDK1.6.0_21 Oracle 一.openfire安装 1.安装openfire3.9.3,下载地 ...
- CodeCover初体验
国庆刚过完,闲来无事,就随便看看,顺便来了解下一些工具的使用,在工作中要用到的时候可以直接上手. CodeCover是一个免费的白盒测试工具,主要测试代码.分支.循环.MC/DC 覆盖.支持为每个测试 ...