从ELF目标文件转储C结构大小

Ray*_*ogh 12 c size struct elf

如何从带有调试符号的ELF目标文件中提取所有C结构的大小?

可以使用"print sizeof(some_struct)"从GDB获得单个结构大小,但我需要的是获取所有结构的列表.

我看过"nm"和"objdump",但我看不到做我正在寻找的选项.有没有办法用标准的Unix工具做到这一点,或者我是否需要从ELF文件中提取调试符号部分并自行处理?我希望不是后者.

提前感谢任何建议.射线

nin*_*alj 14

pahole显示了这个以及结构的其他细节.它的git repo位于http://www.kernel.org/git/?p=linux/kernel/git/acme/pahole.git;a=summary.


moo*_*ray 12

您将不得不深入了解.debug_info部分,如果您使用--dwarf参数运行它,objdump将为您转储它.

您将在那里看到您的结构*DW_TAG_structure_type*和*DW_AT_byte_size*属性等同于sizeof.标准的Unix工具应该足以将这些数据格式化为更易读的列表.


yup*_*921 6

安装包 dwarves,然后你就有了命令“pahole”。

对elf对象文件使用“pahole”命令,可以获得所有结构信息,也可以使用“-C”参数指定一个结构名称,例如:

$ pahole vmlinux -C task_struct


Aat*_*man -2

除非其他人知道某些事情,否则我认为您将必须处理 nm 的输出。

然而, nm 只给你每个结构的开始,而不知道它的结束,所以即使这样也可能不起作用,除非每个支柱后面紧跟着一些其他符号。注意这个问题!