debugging - 从可执行文件中提取结构定义

标签 debugging elf debug-symbols readelf

我需要从可执行文件中提取结构定义。我怎样才能做到这一点? 我读到我们可以使用 ELF 来做到这一点,但不知道如何做到这一点。这里有什么帮助吗?

最佳答案

I read we can do it using ELF, but not sure how to do this.

可能读到的是如果二进制文件包含调试信息,那么变量、结构和许多其他类型的类型可以从该二进制文件中提取信息。

这并不是 ELF 特有的:许多其他可执行格式(例如 COFF)也允许嵌入调试信息。

此外,不同平台之间的调试信息的格式也不同。一些常见的 UNIX 是 DWARFSTABS(其中 DWARF 更新且更强大)。

如果您有 ELF 二进制文件,并且您怀疑它可能包含 DWARF 调试信息,您可以使用 readelf -wi a.out< 对其进行解码 (准备好有大量信息,如果有的话)。 objdump -g 可用于解码 STABS(最新的 objdump 版本也可以解码 DWARF)。

或者,按照 tristan 的建议,您可以将可执行文件加载到 GDB 中并使用 info typesptype 命令。

如果二进制文件不包含调试信息,那么 DrPrItay 的答案是正确的:您无法轻松从中恢复结构定义。但是,您仍然可以通过使用逆向工程技术来恢复它们。例如,Wine 项目 ( example ) 使用的许多结构体定义就是通过此类技术获得的。

关于debugging - 从可执行文件中提取结构定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38859844/

相关文章:

c++ - 有没有一种方法可以通过 #define 列出在 c/c++ 中定义的符号

debugging - 如何在 GoLand 中设置调试?

debugging - 在调试 session 期间修改代码。

c - 创建比率时,二进制表达式错误的操作数无效

c - 在静态和动态链接期间隐藏符号,暴露给 dlsym 以进行动态加载

c - 为什么 gcc 向非调试版本添加符号?

c# - VSCode dbg附加本地进程来调试C# dll使用的C dll

linux 可执行文件不执行但默默退出

c - 打开 ELF 文件并检查

debugging - LLDB 符号转储