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调试汇编堆栈过程分析

posted on 2016-11-30 19:11  20145305解佳玲  阅读(5334)  评论(0编辑  收藏  举报