20145202马超GDB调试汇编堆栈过程分析

  • esc :w保存,:wq保存并退出
  • x:删除错误的单个字母
  • dw:删除整个单词
  • gcc hello.c -o hello:运行hello.c
  • gcc -g hello.c -o hello:用来调试
  • gcc -E hello.c -o hello.i:编译
  • gcc -S hello.i -o hello.s:cpp到ccl,c语言到汇编
  • gcc -c hello.s -o hello.o:ccl到as,汇编语言到机器码
  • file hello.c:查看hello文件
  • od hello.o:
  • 断点:函数断点,临时断点,b 行号,条件断点

    代码的学习


    gcc -g haha.c -o haha -m32
    gbd haha

  • frame 打印出的信息:栈的层编号,当前的函数名,函数参数值,函数所在文件及行号,函数执行到的语句。
  • info frame 打印出的信息:函数地址,调用函数的地址,被调用函数的地址,目前的函数是由什么样的程序语言写成的、函数参数地址及值、局部变量的地址等等。
  • 输入命令 disassemble ,显示出该代码(main())的汇编形式

  • info registers ,显示当前(main()处)寄存器值

  • 使用 s 单步运行程序

  • 使用 up down ,跳转不同堆栈,查询其中的堆栈简要信息

  • 该代码中,共存在过3个堆栈,对每个堆栈查询其详细信息,观察堆栈变化:
  • 由 main() 函数形成的堆zhan:

  • 由 f1 函数形成的堆栈:

  • 由 g1 函数形成的堆栈:

汇编调试

  • 1.b main(设置断点)
  • 2.r(run) 运行
  • 3.n(next),s(step)优先使用next,如果单行出错了再用step进到里面进行调试
  • 4.quit

  • until:跳过一个大循环
  • tb 14:14行驶临时断点
  • b 12 if i==5000:12行设置了一个条件断点并且在i=5000时停下来。
  • disp j:j的值每变化一次就会打印一次j
  • finish:当使用s进入到一个循环里后再使用finsih就可以直接执行完这个循环。

  • (gdb)p/x i:打印变量名为 i 的十六进制值
  • (gdb) display /3i $pc:这是一种设置,设置好了调试过程中每一步都回显一次,这里是一次显示 3 行,3 在这里是指一次显示几行,不输入,缺省为1
  • (e)xamine:功能和display差不太多,区别就是display是一种设置,每次跳命令显示一次,x是主动显示:x/
  • main 、f1、 g13个函数所对应的汇编代码:

  • 设置display ,每一步显示一行代码,查看当前 main() 断点处初始的寄存器值(主要观察%eax,%ebx,%esp,%eip)

  • printf("%d\n,f1(1)+6);,转到fi函数地址处:

  • int f1(int x){,建立f1函数的堆栈,保存数据,更新信息,return g1(x),保存f1函数的数据,之后跳转到g1函数的地址,int g1(int x),建立g1函数的堆栈,保存数据,更新信息,return x+5;,进行计算,},销毁g1函数的堆栈,并且回到从f1函数跳出来的下一条指令,},销毁f1函数的堆栈,并且回到从main函数跳出来的下一条指令,printf("%d\n,f1(1)+6);,进行运算。

代码托管

http://git.oschina.net/tuolemi/haha

学习进度条

20145202马超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. LotusScript_批量更改数据库标识符(id)

    OA开发中经常要搭建测试环境,测试环境的数据库与原数据库不能有ID冲突现象,以防混淆.以下是一个批量修改数据库标识符的方法,其中,取得这些需要更改的数据库,需要导出源服务器上的数据库路径和名称,方法详 ...

  2. PhoneGap&jQuery Mobile应用开发环境配置(For Android)

    关于移动应用为什么用PhoneGap和jQuery Mobile本文不再赘述,有兴趣的童鞋可以自行问“度娘”,有很多这方面的文章.本文主要介绍PhoneGap&jQuery Mobile移动应 ...

  3. Linux系统如何设置开机程序自启动

    在Linux系统如何让程序开机时自动启动      核心提示:系统的服务在开机时一般都可以自动启动,那在linux系统下如果想要程序在开机时自动启动怎么办?我们知道在 windows系统“开始”--& ...

  4. JavaScript如何转换数据库DateTime字段类型?

    Javascript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在html(标 ...

  5. API:什么是API?API与interface的区别

    我们都知道,API就是接口,那是什么鬼呢? 1.什么是API? api接口开发,其实和平时开发逻辑差不多:但是也有略微差异: 平时使用mvc开发网站的思路一般是都 由控制器 去 调用模型,模型返回数据 ...

  6. 网页打开速度优化——HTTP请求头及响应头

    no-cache:不缓存过期的资源 no-store:不缓存 最近看了<图解HTTP>这本书,书上讲到了这两者的区别: no-cache从字面意义上很容易误解为不缓存,但是no-cache ...

  7. 数据结构与算法分析java——线性表1

    说到线性结构的话,我们可以根据其实现方式分为三类: 1)顺序结构的线性表 2)链式结构的线性表 3)栈和队列的线性表   应用程序后在那个的数据大致有四种基本的逻辑结构: 集合:数据元素之间只有&qu ...

  8. 在ABAP里取得一个数据库表记录数的两种方法

    方法1:使用函数EM_GET_NUMBER_OF_ENTRIES 这个函数使用起来很简单,只需要将想查询的数据库表名称维护进输入参数IT_TABLES: 上图说明这个函数支持批量操作,我查询的两张表名 ...

  9. C++学习之拷贝构造函数

    嘛是拷贝构造函数? 如果一个构造函数的第一个参数是’自身类‘ ‘类型’的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数.如: [代码1] 1 2 3 4 5 6 class A{ publ ...

  10. 使用Python命令创建jenkins的job

    目的:通过调用jenkins的命令,动态创建jenkins的job 如何使用,使用Python的脚本,更多API可以进入到官网去查看,http://jenkinsapi.readthedocs.io/ ...