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

时间:2011-05-10 17:46:00

标签: c struct size elf

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

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

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

提前感谢任何建议。 射线

4 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:11)

你必须深入了解.debug_info部分,如果用 - dwarf 参数运行它,objdump会为你转储它。

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

答案 2 :(得分:4)

安装包矮人,然后你有“pahole”命令。

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

$ pahole vmlinux -C task_struct

答案 3 :(得分:0)

除非别人知道某事,否则我认为你必须处理nm的输出。

然而,nm只为你提供了每个结构的开始,并且对它的结束一无所知,所以即使这样也可能不起作用,除非每个结构紧跟一些其他符号。注意这个问题!