【问题标题】:Keeping type definitions and some symbols in an elf file在 elf 文件中保存类型定义和一些符号
【发布时间】:2014-11-04 11:05:19
【问题描述】:

从一个包含完全调试我的应用程序所需的所有信息的 elf 文件开始,我想制作一个只包含一些符号的 elf。
我设法用 GNU binutils 剥离工具做到了这一点:
strip -F elf32-big -p -s -K myFunc1-K myFunc2 -K myVar1 -K myVar2 myApp.elf
我在这里担心的是myVar1myVar2 是结构化变量,调试器无法挖掘它们,因为'strip'从elf中删除了.debug_info部分(我理解.debug_info是存储结构定义的地方)。 理想情况下,我只会在精灵中保留调试器解析我的变量所必需的内容。我玩了'strip'的选项。在阅读了this thread 之后,我使用了其他 binutils(readelf、objcopy、objdump...)。但它没有给出任何令人满意的结果。
你会怎么做?

【问题讨论】:

    标签: struct elf strip binutils


    【解决方案1】:

    我不知道有什么工具可以满足你的需求。

    如果我被要求这样做,我会先反击。与其尝试剥离部分调试信息,我想知道为什么我们不能使用现有的拆分调试信息方法。与 build-ids 相结合,它具有一个很好的特性,即可以发布剥离的可执行文件,但在需要时仍然可以进行全面调试——只需将 gdb 指向 debuginfo ELF。

    也就是说,如果我必须写它,我会说,首先明确定义您想要保留的内容。然后,编写一个程序来读取 DWARF(例如,为此使用 elfutils 库),然后用所需的信息写出新的 DWARF。

    这不是非常难(参见“dwz”工具以获取 DWARF 操纵器的示例......)但也不是那么容易。

    【讨论】:

    • 谢谢。我仍然希望有人提出一个解决方案,这并不意味着我对精灵/矮人的内部结构太费心了。并且只是为了避免任何混淆:我的应用程序不是 Linux 应用程序,而是裸机应用程序,具体来说是嵌入式调度程序;我的调试器不是 gdb,而是 Lauterbach Trace32。
    猜你喜欢
    • 1970-01-01
    • 2014-11-15
    • 2021-08-20
    • 1970-01-01
    • 2010-09-24
    • 2020-12-09
    • 2018-10-22
    • 2022-12-03
    • 1970-01-01
    相关资源
    最近更新 更多