We’re working on a C program compiled with arm-eabi-gcc under Linux.
We’re using a dump of a large structure and we’re having problems determining at which adress we should read various fields of our structure (like 50 of them), (memory alignement and padding aren’t so predictable to me).
Is there any way to get the memory mapping of the structure produced by a our compiler. An option in gdb? Or any tool helping us find the correspondance between fields and adress in the dump?
You can do it with
gdb. As an example, I’ll use this source:Loading up the binary in
gdb:UPDATE:
If you need to do it for a large number of fields, then you may find it handy to use GDB’s new python interface (you’ll need a recent version of GDB to use it, I’m using 7.4). I’ve created offsets.py:
Then you can add to your .gdbinit:
Then using it in GDB, like:
This script makes a few simplifying assumptions, like that you don’t use bitfields, and it doesn’t dig into nested structs, but those changes are3 fairly straightforward if you need them.