gdb调试中怎么查看其中一行的汇编代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gdb调试中怎么查看其中一行的汇编代码相关的知识,希望对你有一定的参考价值。

参考技术A disassemble 地址或者函数名

20145311利用gdb调试汇编代码

利用GDB调试汇编代码

首先编写c语言原代码,我使用的是同学分析过的代码

#include<stdio.h>
short addend1 = 1;
static int addend2 = 2;
const static long addend3 = 3;

static int g(int x)
{
    return x + addend1;
}  

static const int f(int x)
{
    return g(x + addend2);
}

int main(void)
{
    return f(8) + addend3;
}

接下来就是生成汇编代码,进行调试生成

源代码是gdb.c 生成的.o文件为5311

技术分享

接下来可以进行gdb调试了

在main函数那个地方设置一个断点,接着run运行

技术分享

使用disassemble指令可以获取汇编代码,用i(info) r(registers)指令可以查看各寄存器的值:

技术分享

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

技术分享

接下来进行单步执行查看各个寄存器的值

技术分享

技术分享

技术分享

继续执行,查看各个寄存器的值,结合书上的知识对各个步骤的指令对寄存器的值造成的影响进行分析

感悟

其实还是没能完全掌握利用gdb对汇编代码进行调试,这与c代码的调试还是有很多不同

另外,由于汇编代码是比较接近于机器的语言,所以理解起来还是要费点力气,不像高级语言理解起来容易

结合了一下同学些的gdb调试汇编代码的例子,有很多还是没能看懂

简单地复习了一下汇编中各种指令,以及参数的传递、指令的跳转,感觉有些繁琐,首先还是要掌握好基础知识,这样在理解一个长串的汇编代码时就会轻松一些。





















以上是关于gdb调试中怎么查看其中一行的汇编代码的主要内容,如果未能解决你的问题,请参考以下文章

GDB调试汇编堆栈过程分析

20145316GDB调试汇编堆栈

GDB调试汇编分析

GDB调试汇编堆栈

在Ubuntu Linux下用gdb调试程序,<gdb>list之后程序不从第一行开始显示,为啥?该怎么解决这个问题?

Linux下调试编写并调试C语言程序,怎么查看它的内存和CPU信息?GDB中可以实现吗?