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

Vin*_*tla 0 c linux elf

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

Bas*_*tch 5

你找不到它.该ELF格式具有非常有限的类型信息(并且不知道是否有些全局变量是一个struct或一个int;它知道大部分的sizeof变量).见elf(5).

但是,如果您编译程序(以及它正在使用的库)以获得调试支持(例如g++ -Wall -g).然后ELF文件包含其他调试部分,通常使用DWARF格式.可以使用该strip命令从ELF文件中删除这些信息.所以请参阅strip(1)&readelf(1)&objdump(1).

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