Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

dumping C structure sizes from ELF object file

Tags:

c

struct

size

elf

How can you extract the sizes of all C structures from an ELF object file with debugging symbols?

Individual struct sizes can be obtained from GDB using "print sizeof(some_struct)", but what I need is to get a listing of all structures.

I've looked at "nm" and "objdump", but I don't see options to do what I'm looking for. Is there a way to do this with standard Unix tools, or do I need to extract the debug symbol section from the ELF file and process it myself? I'm hoping it's not the latter.

Thanks in advance for any advice. Ray

like image 294
Ray Balogh Avatar asked May 10 '11 17:05

Ray Balogh


3 Answers

pahole shows this and other details about structs. Its git repo is at http://www.kernel.org/git/?p=linux/kernel/git/acme/pahole.git;a=summary.

like image 103
ninjalj Avatar answered Oct 22 '22 22:10

ninjalj


You will have to dig in .debug_info section, objdump will dump it for you if you run it with --dwarf parameter.

You will see your structures there as *DW_TAG_structure_type* and *DW_AT_byte_size* attribute is equivalent to sizeof. Standard Unix tool should be enough to format this data into more readable list.

like image 22
moorray Avatar answered Oct 22 '22 22:10

moorray


Install package dwarves, then you have the command "pahole".

Use the "pahole" command against a elf object file, you can get all the structure information, or you can use the "-C" parameter to specific a structure name, for example:

$ pahole vmlinux -C task_struct

like image 45
yupeng0921 Avatar answered Oct 23 '22 00:10

yupeng0921