【1000个GDB技巧-001】-gdb add-symbol-file如何添加内核模块?add-symbol-file xxx.ko 0x12 -s .data 0x67 -s .bss 0x345

ASF在加载符号时不指定运行地址可能导致全局变量取值为偏移。需明确代码段、数据段和BSS段的加载位置,如:add-symbol-filexxx.ko0x12345678-s.data0x6789282-s.bss0x345667。可通过/cat/proc/modules获取text地址,/sys/modules/xxxmodule/sections/查看各段地址。

asf是用来加载符号的,加载符号的时候,如果不指定文件的运行地址,就会造成取全局变量的时候,会得到一个偏移值,而不是实际的值

直接加载起始地址是0 造成读取全局变量等地址仅仅是一个偏移

需要指定,代码段,数据段和bss段的加载地址

add-symbol-file xxx.ko 0x12345678 -s .data 0x6789282 -s .bss 0x345667

第一个参数默认是.text

获取text还有一个方式就是cat /proc/modules 最后一个地址

加载地址获取方式

cd /sys/modules/xxxmodule/sections/

cat .text .data .bss

`gdb-multiarch` 是一个支持多架构调试的 GDB 版本,`add-symbol-file` 命令用于在调试时向 GDB添加符号文件。 ### 使用方法 `add-symbol-file` 命令的基本语法如下: ```plaintext add-symbol-file filename address ``` - `filename`:符号文件的路径,可以是目标文件(如 `.o` 文件)或者可执行文件。 - `address`:符号文件对应的代码在内存中的加载地址。这个地址通常是程序在内存中加载的起始地址,可通过反汇编或者其他调试信息来确定。 例如,若有一个符号文件 `example.o`,其在内存中的加载地址为 `0x1000`,可使用以下命令添加符号文件: ```plaintext (gdb) add-symbol-file example.o 0x1000 ``` ### 相关说明 - **符号文件类型**:符号文件通常包含了程序的符号表信息,如函数名、变量名及其对应的地址。常见的符号文件类型有 `.o`(目标文件)、`.elf`(可执行与可链接格式文件)等。 - **地址的确定**:地址可以通过多种方式确定,如使用 `objdump` 命令查看反汇编信息,或者在调试过程中根据程序的加载情况来确定。 - **多个符号文件**:可以多次使用 `add-symbol-file` 命令添加多个符号文件,以支持对多个模块的调试。 ### 注意事项 - **地址准确性**:地址必须准确无误,否则 GDB 可能无法正确关联符号信息,导致调试信息显示错误。 - **符号文件一致性**:符号文件必须与目标程序的版本和编译选项一致,否则可能会出现符号不匹配的问题。 - **动态加载模块**:对于动态加载的模块,需要在模块加载到内存后,根据其实际加载地址添加符号文件。 ### 代码示例 以下是一个简单的示例,展示如何使用 `add-symbol-file` 命令: ```plaintext # 启动 gdb-multiarch gdb-multiarch # 连接到目标程序(假设通过 gdbserver 连接) (gdb) target remote localhost:1234 # 添加符号文件 (gdb) add-symbol-file example.o 0x1000 # 开始调试 (gdb) continue ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值