C 如何在ELF文件中查找变量类型?

C 如何在ELF文件中查找变量类型?,c,linux,elf,C,Linux,Elf,我想更改ELF文件中的全局结构。 首先我想知道全局变量是否是一个结构? 但是我看到的唯一信息是变量的名称和大小。您找不到它。格式的类型信息非常有限(并且不知道某个全局变量是struct还是int;它主要知道变量的sizeof)。看 但是,如果您编译程序(及其使用的库)以获得调试支持(例如,使用g++-Wall-g)。然后,ELF文件包含额外的调试部分,通常使用以下格式。可以使用strip命令从ELF文件中删除这些信息。所以看&& 但是你真的想用这个。因此,获取程序的源代码(因为Linux主要是由

我想更改ELF文件中的全局结构。 首先我想知道全局变量是否是一个结构? 但是我看到的唯一信息是变量的名称和大小。

您找不到它。格式的类型信息非常有限(并且不知道某个全局变量是
struct
还是
int
;它主要知道变量的
sizeof
)。看

但是,如果您编译程序(及其使用的库)以获得调试支持(例如,使用
g++-Wall-g
)。然后,ELF文件包含额外的调试部分,通常使用以下格式。可以使用
strip
命令从ELF文件中删除这些信息。所以看&&

但是你真的想用这个。因此,获取程序的源代码(因为Linux主要是由Linux组成的,这通常是可能的)并重新编译它(当然还要学习程序的源代码)。也许你想(但这需要数周的工作)定制你的编译器(例如,通过编写你自己的GCC插件,或使用,或定制你的Clang编译器),并使用它来重新编译代码(特别是处理所有全局变量声明)。

你找不到它。格式的类型信息非常有限(并且不知道某个全局变量是
struct
还是
int
;它主要知道变量的
sizeof
)。看

但是,如果您编译程序(及其使用的库)以获得调试支持(例如,使用
g++-Wall-g
)。然后,ELF文件包含额外的调试部分,通常使用以下格式。可以使用
strip
命令从ELF文件中删除这些信息。所以看&&


但是你真的想用这个。因此,获取程序的源代码(因为Linux主要是由Linux组成的,这通常是可能的)并重新编译它(当然还要学习程序的源代码)。也许你想(但这需要数周的工作)定制你的编译器(例如,通过编写你自己的GCC插件,或使用,或定制你的Clang编译器),并使用它来重新编译代码(特别是处理所有全局变量声明)。

类型的详细信息将只存储在调试信息中;当程序以其他方式运行时,不需要这些信息。你所做的似乎有可能被误导——期待失败。使用该结构的代码将与编译源代码时使用的结构形状/大小紧密关联。如果你改变它,你的程序就会失灵。ELF文件中没有“变量”或“类型”。这些是源代码概念。ELF文件只包含批量数据和指向数据开头的符号。如果您愿意,elf文件的所有内容都是
char[]
void*
。您为什么要问这个问题?你的问题不清楚(严格意义上,ELF定义了它的结构),很可能是一个问题。所以你应该编辑你的问题来激发它,解释更多的问题;当程序以其他方式运行时,不需要这些信息。你所做的似乎有可能被误导——期待失败。使用该结构的代码将与编译源代码时使用的结构形状/大小紧密关联。如果你改变它,你的程序就会失灵。ELF文件中没有“变量”或“类型”。这些是源代码概念。ELF文件只包含批量数据和指向数据开头的符号。如果您愿意,elf文件的所有内容都是
char[]
void*
。您为什么要问这个问题?你的问题不清楚(严格意义上,ELF定义了它的结构),很可能是一个问题。所以你应该编辑你的问题来激发它,解释更多。