GDB调试命令(二)---反汇编相关

本文介绍如何使用gdb程序将可执行程序加载到内存中,并通过gdb的反汇编命令进行调试。包括设置反汇编格式、执行反汇编、设置断点、单步调试等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       将可执行程序用gdb program_name调用到内存中后,就可以利用gdb的反汇编命令调试程序了。常用命令如下:

       (1)设置反汇编的代码为intel格式

       gdb默认反汇编为att格式的指令。可以通过show disassembly-flavor查看。如果习惯intel格式的,用命令

       set disassembly-flavor intel设置。

       (2)反汇编命令disas/disass/disassemble

       功能:将内存中的机器码程序以指令助记符的形式显示出来。

       格式: disas/disass/disassemble 函数名/起始地址[,结束地址]

       例如:

       disas main,显示main函数对应的汇编代码 

       (3)info line

       功能:查看某个line的相关信息。

       格式:info line 函数名/*内存地址

       说明:如果参数为函数名,则显示该函数在源文件中的行号及在内存中的起始地址和结束地址。例如:

        info line main输出为:Line 36 of "bomb.c" starts at address 0x401050 <main> and ends at 0x40106b <main+27>.

       如果参数为*内存地址,则显示该内存地址的指令对应的语句所在的函数在源文件中的行号及在内存中的起始地址和结束地址。例如:

       info line *0x401053输出为:Line 36 of "bomb.c" starts at address 0x401050 <main> and ends at 0x40106b <main+27>.

       (4)r 开始/重新执行  r means run

       (5)b设置断点 b means break

       格式:b *内存地址

        delete:删除所有断点

        delete num:删除编号为num的断点 

        info break:列出所有断点

       (6)ni 单步步过,相当于debug命令中的p

       (7)si 单步步入,相当于debug命令中的t

       (8)finish 执行到返回

       (9)display 显示某寄存器的值

       格式:display /x $寄存器名字。例如:display /x $eax

       (10)x查看内存单元

       格式:x  /nfu 内存地址 x means examine

       说明:
       n表示要显示的内存单元的个数
       f表示显示方式, 可取如下值:
       x 按十六进制格式显示变量。
       d 按十进制格式显示变量。
       u 按十进制格式显示无符号整型。
       o 按八进制格式显示变量。
       t 按二进制格式显示变量。
       a按十六进制格式显示变量。
       i 指令地址格式。
       c 按字符格式显示变量。

       s 按字符串格式显示变量。
       f 按浮点数格式显示变量。
       u表示一个地址单元的长度,其中:
       b表示单字节,
       h表示双字节,
       w表示四字节,
       g表示八字节。

    (11)p查看变量值

      格式: p 变量名

      如果要查看变量的地址,用p &变量名 



 

### GDB 调试命令列表与完整教程 GDB 是 GNU 项目推出的一款功能强大的调试工具,广泛应用于多种编程语言和操作系统的程序调试过程中。以下是关于 GDB 调试命令的一些重要知识点以及完整的命令列表。 #### GDB 基本概念 GDB 支持多平台、多语言的软件调试,其主要用途包括但不限于设置断点、单步跟踪、查看变量值等功能[^2]。通过这些功能,开发者可以轻松定位并修复代码中的逻辑错误。 #### 启动与退出 GDB - **启动 GDB**: 可以通过 `gdb program` 或者 `gdb --args program arg1 arg2 ...` 来加载待调试的目标程序。 - **退出 GDB**: 输入 `quit` 或者快捷键 `Ctrl+D` 即可退出 GDB 工具环境[^3]。 #### 设置断点 断点是调试的核心之一,用于暂停程序运行以便进一步分析。 - `break filename:lineno`: 在指定文件的某一行设置断点。 - `break functionname`: 在某个函数入口处设置断点。 - `delete breakpoint_number`: 删除特定编号的断点。 - `disable breakpoint_number`: 禁用而不删除断点[^1]。 #### 运行控制 - `run arguments...`: 开始或重新开始目标程序的执行,并传递参数给它。 - `continue`: 继续执行直到遇到下一个断点。 - `step`: 执行下一条语句,如果当前语句是一个函数调用,则进入该函数内部。 - `next`: 类似于 step,但它不会进入函数内部。 #### 查看状态 - `info breakpoints`: 列出所有已定义的断点及其状态。 - `print variable_name`: 显示变量的具体数值。 - `list lineno`: 展示源码中指定位置附近的几行代码。 #### 高级特性 对于更复杂的场景,还可以利用以下高级功能: - **条件断点**:允许仅当某些条件下才触发中断,例如 `break line if condition`。 - **观察点**:监视表达式的改变情况而无需知道确切的位置,比如 `watch expression`。 - **反汇编视图**:借助 `disassemble/range` 查阅机器指令层面的信息。 ```bash # 示例:简单使用 gdb 对 hello.c 文件进行调试 $ gcc -o hello -ggdb hello.c $ gdb ./hello (gdb) break main Breakpoint 1 at ... (gdb) run Starting program... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值