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

标签 c linux elf

我想更改 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/

相关文章:

c - 用指针和地址更新整数

c - 如何将MPU6050设备数据发送到IoT Hub

linux - 符号、ELF 以及如何在内存中链接

linker - elf 文件中段的虚拟和物理地址

linux - 如何确定管道缓冲区已满?

elf - 在 elf 二进制文件中查找所有函数定义的方法

连续字符串替换导致C中读取无效

c - 当用户输入 `scanf` DOT 时停止 "."

c - 无法处理的 POSIX 信号的返回码

linux - 是否可以将具有 SCHED_FIFO 进程的 Linux 机器设置为 "hang"?