add-symbol-file 的-o offset没有效果
时间: 2023-08-08 10:04:56 浏览: 167
`add-symbol-file` 命令中的 `-o` 选项用于指定符号文件在内存中的加载地址偏移量。如果您发现使用 `-o` 选项指定的偏移量没有生效,可能是因为符号文件已经被加载到了错误的偏移地址。
在使用 `add-symbol-file` 命令时,您需要确保符号文件的加载地址与程序实际加载符号文件的地址相匹配。如果符号文件被加载到了错误的地址,那么 `-o` 选项指定的偏移量将不起作用。
您可以使用 `info files` 命令在 GDB 中查看程序加载的所有文件及其加载地址。如果您发现符号文件的加载地址与您指定的地址不同,您需要使用 `remove-symbol-file` 命令将符号文件从 GDB 中删除,然后重新使用 `add-symbol-file` 命令并指定正确的地址。
例如,假设您要将符号文件 `my_symbols` 加载到地址 `0x1000`,您可以执行以下步骤:
1. 在 GDB 中启动程序,并使用 `info files` 命令查看符号文件的加载地址:
```
(gdb) info files
Symbols from "/path/to/program".
Local exec file:
`/path/to/program', file type elf64-x86-64.
Entry point: 0x4006d0
0x0000000000400238 - 0x0000000000400254 is .interp
0x0000000000400254 - 0x0000000000400274 is .note.ABI-tag
...
0x00007ffff7de88c8 - 0x00007ffff7de8cfc is .gnu.version_r
0x00007ffff7de8d00 - 0x00007ffff7de8f80 is .rela.dyn
0x00007ffff7de8f80 - 0x00007ffff7de9298 is .rela.plt
0x00007ffff7de9298 - 0x00007ffff7de92b0 is .init
...
0x00007ffff7dfc3c0 - 0x00007ffff7dfc3c8 is .fini_array
0x00007ffff7dfc3c8 - 0x00007ffff7dfc3d8 is .fini_array_entry
0x00007ffffffde000 - 0x00007ffffffff000 is [vsyscall]
0x00007fffffffe000 - 0x00007ffffffff000 is [vvar]
0x00007fffffff0000 - 0x00007ffffffff000 is [vdso]
0x00007ffffffde000 - 0x00007ffffffde200 is .vsyscall
Symbols from "/path/to/my_symbols".
Local symbol file:
`/path/to/my_symbols', file type elf64-x86-64.
Entry point: 0x0
0x0000000000000000 - 0x0000000000000000 is .text
...
```
2. 如果您发现符号文件的加载地址不正确,您需要使用 `remove-symbol-file` 命令将其从 GDB 中删除:
```
(gdb) remove-symbol-file /path/to/my_symbols
```
3. 然后,使用 `add-symbol-file` 命令并指定正确的地址重新加载符号文件:
```
(gdb) add-symbol-file /path/to/my_symbols 0x1000
```
现在,您应该能够在 GDB 中正确地使用符号文件了。
阅读全文