我需要从可执行文件中提取结构定义。我怎样才能做到这一点? 我读到我们可以使用 ELF 来做到这一点,但不知道如何做到这一点。这里有什么帮助吗?
最佳答案
I read we can do it using ELF, but not sure how to do this.
您可能读到的是如果二进制文件包含调试信息,那么变量、结构和许多其他类型的类型可以从该二进制文件中提取信息。
这并不是 ELF
特有的:许多其他可执行格式(例如 COFF
)也允许嵌入调试信息。
此外,不同平台之间的调试信息的格式也不同。一些常见的 UNIX 是 DWARF
和 STABS
(其中 DWARF
更新且更强大)。
如果您有 ELF
二进制文件,并且您怀疑它可能包含 DWARF
调试信息,您可以使用 readelf -wi a.out< 对其进行解码
(准备好有大量信息,如果有的话)。 objdump -g
可用于解码 STABS
(最新的 objdump
版本也可以解码 DWARF
)。
或者,按照 tristan 的建议,您可以将可执行文件加载到 GDB 中并使用 info types
和 ptype
命令。
如果二进制文件不包含调试信息,那么 DrPrItay 的答案是正确的:您无法轻松从中恢复结构定义。但是,您仍然可以通过使用逆向工程技术来恢复它们。例如,Wine
项目 ( example ) 使用的许多结构体定义就是通过此类技术获得的。
关于debugging - 从可执行文件中提取结构定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38859844/