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调试汇编堆栈过程分析的更多相关文章

  1. GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...

  2. 20145212——GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...

  3. 20145223《信息安全系统设计基础》 GDB调试汇编堆栈过程分析

    20145223<信息安全系统设计基础> GDB调试汇编堆栈过程分析 分析的c语言源码 生成汇编代码--命令:gcc -g example.c -o example -m32 进入gdb调 ...

  4. 赵文豪 GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 使用gdb调 ...

  5. 20145337 GDB调试汇编堆栈过程分析

    20145337 GDB调试汇编堆栈过程分析 测试代码 #include<stdio.h> short addend1 = 1; static int addend2 = 2; const ...

  6. 20145208 GDB调试汇编堆栈过程分析

    20145208 GDB调试汇编堆栈过程分析 测试代码 #include<stdio.h> short addend1 = 1; static int addend2 = 2; const ...

  7. 20145218 GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 虚拟机中分析过程 输入gcc - g example.c -o example -m32指令在64位机器上产生32位汇编,但出现以下错误: 这时需要使用sudo apt-g ...

  8. 20145236 GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 首先需要输入sudo apt-get install libc6-dev-i386安装一个库才能产生汇编代码,然后输入gcc - g example.c -o exampl ...

  9. 20145312 GDB调试汇编堆栈过程分析

    20145312 GDB调试汇编堆栈过程分析 参考资料 卢肖明同学的博客:<GDB调试汇编堆栈过程分析>: http://www.cnblogs.com/lxm20145215----/p ...

随机推荐

  1. codeforces C. Triangle

    C. Triangle time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  2. python django 与数据库的交互

    下载没有任何问题的mysqdb http://www.codegood.com/archives/4 1创建一个新的app. python manage.py startapp books 2 激活a ...

  3. linux—【用户和组的管理操作】(5)

    用户:user 组:group 增加:add 修改:modify   mod 删除:delete    del useradd     增加用户 usermod    修改用户 userdel     ...

  4. 用SecureCRT在windows和CentOS间上传下载文件

    安装lrzsz: # yum -y install lrzsz 现在就可以正常使用rz.sz命令上传.下载数据了 配置SecureCRT的session选项的SFTP标签页和X/Y/Zmodem中的目 ...

  5. Java dynamical proxy demo

    今天练习了一下动态代理的一个方面,假设使用它来完成自动设置默认不提交,启动事务,获取到异常则回滚,正常执行则提交. 如果不使用动态代理,则需要在每个方法本身里面设置Connection,写try,ca ...

  6. [转]GridView排序——微软提供Sort

    本文转自:http://www.cnblogs.com/eva_2010/articles/1995646.html 在GridView中,根据其中的某列进行排序. 1. 页面:AllowSortin ...

  7. ZBrush中必须记住的常用快捷键

    ZBrush是一款数字雕刻和绘画软件,它以强大的功能和直观的工作流程彻底改变了整个三维雕刻行业.强大的功能离不开便捷的操作,为此ZBrush提供了一系列常用操作快捷键,熟练掌握这些快捷键,可帮助您节省 ...

  8. 边工作边刷题:70天一遍leetcode: day 82-1

    Closest Binary Search Tree Value II 要点:通过iterator,把closest值附近的k个closest找到,从而time降为O(klgn) in order i ...

  9. 利用jquery来进行表单的多向提交

    最近由于特别忙,每晚都是1到2点倒床便睡的那种,所以没有给自己要求写日记,等这阶段过完,还会重新开始. 今天来写一个前端的表单提交的方法. 有时往往以为在同一个表单中,不同的按钮,来表达的含义不同,需 ...

  10. [3D跑酷] MissionManager

    前言 许久没有更新日志了,之前写了GUIManager,GUIClickEventReceiver还有AudioManager,这次写MissionManager 引用关系 首先看下MissionMa ...