【问题标题】:Stripping all but specified debug information from executable从可执行文件中删除除指定调试信息之外的所有调试信息
【发布时间】:2015-07-31 00:23:53
【问题描述】:

我正在为 Linux 开发一个共享库,它会生成一些我想在调试器中标记的线程。

我读过这可以通过写入 /proc/[PID]/tasks/[TID]/comm 来完成,但这不起作用(我的目标是较旧的 libc)。我还希望能够分配比通信限制更长的名称。

我的计划是通过将 Python 脚本放在 .debug_gdb_scripts section 中来自动加载它来执行此操作。

但是,除了脚本及其需要的内容之外,我还想去除调试信息。 我尝试使用 --keep-symbol 选项,但所有调试部分(包括 .debug_gdb_scripts)仍被删除。

有什么办法可以保存这些吗?

【问题讨论】:

    标签: linux gdb elf gnu-assembler binutils


    【解决方案1】:

    想到的一个想法是先剥离您的程序,然后使用objcopy 添加.debug_gdb_scripts。

    另一种方法可能是将.debug_gdb_scripts 放在mini debug section 中。我认为这应该可以,虽然有点奇怪——我认为第一种方法更合理。

    另一种选择是只做标准的事情并将所有调试信息剥离到一个单独的调试信息文件中,然后在调试时使用该文件。但是,根据您的问题,我认为您不想这样做是有某些原因的。

    【讨论】:

    • 我想分发一个共享库,用户可以在其中设置断点并打印一些函数的参数信息,但删除其他所有函数的符号/调试信息。听起来这可能是不可能的。
    • 我认为这绝对是困难的,因为您想为这些功能的类型和一些信息提供 DWARF,但不为其他功能提供。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2021-08-31
    • 1970-01-01
    • 2018-03-30
    • 2012-12-19
    • 1970-01-01
    相关资源
    最近更新 更多