是否可以从 ELF 核心文件中删除堆

Is it possible to remove the heap from an ELF Core file?

本文关键字:文件 删除 核心 ELF 是否      更新时间:2023-10-16

我正在通过/proc/sys/kernel/core_pattern从非常大的核心转储中收集堆栈跟踪。以下问题建议使用 /proc/pid/core_filter 来减小大型核心转储的大小:

最小核心转储(仅堆栈跟踪 + 当前帧)

Linux 中的选择性核心转储 - 如何选择转储的部分?

是否可以获取仅包含调用堆栈、线程和局部变量的 Linux 核心转储?

但是,当将core_filter设置为"0"时,生成的核心转储对 gdb 的 bt 命令不再有意义。

所以,我有以下两部分的问题:

1) 除了 gdb 之外,是否有工具可以从这些最小的核心转储中提取堆栈跟踪?

2) 是否可以解析 ELF 核心文件以删除堆段?这个问题:堆栈和堆是什么以及在哪里?似乎表明这可能是可能的。

谢谢!

但是,当将core_filter设置为"0"时,生成的核心转储对 gdb 的 bt 命令不再有意义。

请注意,对于动态链接的二进制文件,GDB backtrace需要了解堆栈跟踪中出现的所有共享库(以便找到相应的展开描述符)。

对于"普通"核心文件,此信息在中。从core中删除堆会损坏info shared,这反过来又会使具有任何共享库的backtrace无法正常工作。

如果您打开位 3(将覆盖共享库的文本,通常不是必需

的,但通过删除堆使它成为必需的),则可以关闭位 0 和 1(匿名私有和共享映射,这将覆盖堆),并且仍然可以获得可用的核心。