首页 技术 正文
技术 2022年11月15日
0 收藏 797 点赞 2,530 浏览 865 个字

GDB调试汇编分析

代码

GDB调试汇编分析
  • 本次实践我参照了许多先做了的同学的博客,有卢肖明,高其,张梓靖同学。代码借用的是卢肖明同学的代码进行调试运行。

    GCC编译

  • 使用gcc -g gdbtest.c -o gdbtest -m32命令在64位的机器上产生32位汇编代码
  • 在使用gdb进行调试运行时,有cgdb和gdb两种工具,我建议大家使用张梓靖同学使用的cgdb工具,因为使用时可以随时看到自己的源代码,看到我们的断点在哪里,每一步返回值到了哪行,更加直观。

分析过程

  • 使用b main指令在main函数处设置断点,然后,使用r指令运行代码,使用disassemble指令获取汇编代码
    GDB调试汇编分析

  • 使用display /i $pc(结合display命令和寄存器/pc内部变量)指令进行设置
    GDB调试汇编分析

  • 可见此时主函数的栈基址为0xffffd068,用x(examine)指令查看内存地址中的值,但目前%esp所指堆栈内容为0,%ebp所指内容也为0
  • 用i r指令查看各寄存器的值
  • 依次如下指令调试汇编代码,并查看%esp、%ebp和堆栈内容:
  • 1、使用si指令单步跟踪一条机器指令
  • 2、使用i r指令查看各寄存器的值(在这里要看%eip、%eax、%esp和%ebp)
  • 3、使用x/na %esp对应的值指令查看堆栈变化

GDB调试汇编分析

GDB调试汇编分析

  • 将上一个函数的基址入栈,从当前%esp开始作为新基址:
    GDB调试汇编分析

  • call指令将下一条指令的地址入栈,此时%esp,%ebp和堆栈的值为:
    GDB调试汇编分析

GDB调试汇编分析

GDB调试汇编分析

  • 实参准备入栈:
    GDB调试汇编分析

GDB调试汇编分析

  • 实参的计算在%eax中进行:

GDB调试汇编分析

GDB调试汇编分析

GDB调试汇编分析

GDB调试汇编分析

  • 将栈中的数据push
    GDB调试汇编分析

GDB调试汇编分析

  • push后寄存器中的值发生转变。

GDB调试汇编分析

GDB调试汇编分析

GDB调试汇编分析

  • 函数f修改了%esp,用leave指令恢复。
    GDB调试汇编分析

  • ret结束main函数
    GDB调试汇编分析

总结反思

  • 这次学习让我对于gdb有了更加深刻地认识,设置断点是我们在进行编写代码时在整体编译没有问题,但是却无法得到我们想要的结果时所进行分段纠错步骤,这次的实践让我对于堆栈变化了有了更加深刻的理解,在使用终端三件工具编程时,没有编程软件上自带写好我们拿来就用的断点设置按钮,之后若是遇到这样的问题我们只能自己动手去做,所以说这次的实践又是我们掌握的一件有力的linux中C语言编程工具。

gdb调试分析汇总表

GDB调试汇编分析
GDB调试汇编分析

上一篇: 工作总结_sql
下一篇: select 相关
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,966
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,487
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,332
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,115
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,748
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,783