gpt4 book ai didi

gdb - 在 gdb 中为文件添加自己的符号

转载 作者:行者123 更新时间:2023-12-04 04:27:16 34 4
gpt4 key购买 nike

好的..所以我正在使用 gdb 在 x86 上进行调试。
有问题的特定文件已被剥离,因此我没有来自二进制文件本身的符号。我无法访问源代码,但对幕后发生的事情有一个粗略的了解。

我的 asm 知识几乎足以决定一个函数的目的并决定它的目的。因此,我可以在查看它们一段时间后决定自己的函数名称,但我希望能够将它们作为符号注入(inject),以便一旦决定它们可以在以后的调试中使用..

有人知道如何将自定义符号加载到 gdb 中吗?
我考虑过重新编译 gdb 并向 UI 添加一个额外的命令,以允许在地址处加载符号。我想知道是否可以使用我定义的符号创建一个虚拟对象文件,然后加载它使用添加符号文件?
或者是否可以用虚拟函数编译一个 c 程序,那么如何强制它们具有正确的大小和正确的位置,然后简单地加载它?

最佳答案

这听起来应该是一件容易的事,但结果却令人惊讶地烦人,主要是因为 ELF 作为一种文件格式生成起来很烦人,所以大多数工具都满足于解析它。

如所述here , GDB 从两个地方读取符号信息,首先是.symtab 中符号的一些最小信息。和/或 .dynsym部分,然后从 .debug_info 获取更多详细信息部分(如果存在)。

这立即提出了两种添加信息的可能方法,将符号添加到 .symtab或生成您自己的 DWARF 信息,包括符号。

然而,从头开始生成 DWARF 似乎是一个非常不常见的用例,所以到目前为止我发现的唯一可行的方法是使用 objcopy将符号添加到二进制文件本身:

objcopy a.out --add-symbol function_name=.text:0x900,function,global a.out2

请注意,gdb 不喜欢函数的绝对符号,我必须将其指定为 .text 的偏移量。有用的部分(即,能够在函数上设置断点并让它出现在回溯中)

此外,我找不到任何方法来修改符号的“大小”字段。

关于gdb - 在 gdb 中为文件添加自己的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5488322/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com