我想更改 ELF 文件中的全局结构。 我首先想知道全局变量是否是结构体? 但我看到的唯一信息是变量的名称和大小。
最佳答案
你找不到它。 ELF format 的类型信息非常有限(并且不知道某个全局变量是 struct
还是 int
;它主要知道 sizeof
多变的)。参见 elf(5) .
但是,如果您编译程序(及其使用的库)以获得调试支持(例如使用 g++ -Wall -g
)。然后 ELF 文件包含额外的调试部分,通常使用 DWARF格式。可以使用 strip
命令从 ELF 文件中删除这些信息。所以看strip(1) & readelf(1) & objdump(1) .
但你真的想使用 source code .因此获取程序的源代码(因为 Linux 主要由 free software 组成,这通常是可能的)并重新编译它(当然还要研究程序的源代码)。也许你想(但这确实需要数周的工作)定制你的编译器(例如,通过编写你自己的 GCC 插件,或使用 GCC MELT,或定制你的 Clang 编译器)并使用它来重新编译代码(并专门处理所有全局变量声明)。
关于c - 如何在 ELF 文件中查找变量类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40903243/