zoukankan      html  css  js  c++  java
  • gdb中汇编调试

    原博客链接

    第五周学习总结

    补充内容

    输入的代码

    使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编

    删除gcc产生代码中以"."开头的编译器指令,针对每条指令画出相应栈帧的情况

    使用gdb example指令进入gdb调试器

    使用“r”命令执行(Run)被调试文件,因为尚未设置任何断点,将直接执行到程序结束:

    使用“b”命令在 main 函数开头设置一个断点(Breakpoint):

    上面最后一行提示已经成功设置断点,并给出了该断点信息:在源文件 test.c 第13行处设置断点;这是本程序的第一个断点(序号为1);断点处的代码地址为 0x80483f9(此值可能仅在本次调试过程中有效)。回过头去看源代码,第13行中的代码为“return f(8)+1”,恰好是 main 函数中的第一个可执行语句。

    再次使用“r”命令执行(Run)被调试程序:

    程序中断在test.c第13行处,即main函数是第一个可执行语句处。
    上面最后一行信息为:下一条将要执行的源代码为“return f(8)+1;”,它是源代码文件test.c中的第13行。
    下面使用“s”命令(Step)执行下一行代码(即第13行“return f(8)+1;”):

    上面的信息表示已经执行完“return f(8)+1;”,并显示下一条要执行的代码为第8行的“return g(x);”。

    使用disassemble指令获取汇编代码

    用i(info) r(registers)指令查看各寄存器的值:

    display /i $pc在每次执行下一条汇编语句时,都会显示出当前执行的语句

    call指令将下一条指令的地址入栈

    frame 打印出的信息:栈的层编号,当前的函数名,函数参数值,函数所在文件及行号,函数执行到的语句。

    info frame 打印出的信息:函数地址,调用函数的地址,被调用函数的地址,目前的函数是由什么样的程序语言写成的、函数参数地址及值、局部变量的地址等等。

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

    剩余内容参考卢肖明同学的博客,内容一样,就不一一贴图了,附上卢肖明同学的博客链接

    GDB调试汇编堆栈过程分析

  • 相关阅读:
    MySQL数据库:数据完整性及约束的应用
    MySQL数据库:运算符
    MySQL数据库:合并结果集
    MySQL数据库:聚合函数的使用
    spring web mvc环境搭建
    golang中type常用用法
    有些事情,你真的要早点明白
    一个小事例,了解golang通道阻塞模式
    golang中,slice的几个易混淆点
    作为面试官的一点小感想
  • 原文地址:https://www.cnblogs.com/summerharper/p/6118965.html
Copyright © 2011-2022 走看看