从包含完全调试我的应用程序所需的所有信息的elf文件开始,我想制作一个只包含一些符号的精灵。
我设法用GNU binutils strip工具做了这个:
strip -F elf32-big -p -s -K myFunc1-K myFunc2 -K myVar1 -K myVar2 myApp.elf
我关注的是myVar1
和myVar2
是结构化变量,而调试器无法深入研究它们,因为' strip'从elf中删除了.debug_info部分(.debug_info是存储结构定义的地方,我理解)。
理想情况下,我只会在精灵中保留调试器解析变量所需的内容。我玩了' strip'的选项。在阅读this thread之后,我和其他binutils(readelf,objcopy,objdump ......)一起玩了。但它没有给人满意的结果
你会怎么做?
答案 0 :(得分:0)
我不知道已经做了你想要的工具。
如果我被要求这样做,首先我会推迟。我想知道为什么我们不能使用现有的split debuginfo方法,而不是试图剥离部分debuginfo。与build-id相结合,这具有很好的属性,可以发送剥离的可执行文件,但仍然可以在需要时进行完全调试 - 只需将gdb指向debuginfo ELF即可。
那就是说,如果我必须写它,我会说,首先要准确定义你想要保留的内容。然后,编写一个程序来读取DWARF(例如,使用elfutils库),然后用新的DWARF写出所需的信息。
这并不是非常困难(参见" dwz"工具以获取DWARF操纵器的示例......)但也不是那么容易。