info:c_memory_structure
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
info:c_memory_structure [2012/10/15 08:17] – [Determining C memory layout] moritz | info:c_memory_structure [2012/10/15 20:10] – [Obtaining the debug section data] moritz | ||
---|---|---|---|
Line 17: | Line 17: | ||
</ | </ | ||
- | On 32-bit machines, it is assumed that an < | + | On 32-bit machines, it is assumed that an '' |
On the Python side I want to be able to use the following code: | On the Python side I want to be able to use the following code: | ||
Line 50: | Line 50: | ||
The only program that really knows the structure layout in memory is the compiler. It decides about the in-memory structure. Hence, I started investigating if there was a way to extract this information from the compiler. | The only program that really knows the structure layout in memory is the compiler. It decides about the in-memory structure. Hence, I started investigating if there was a way to extract this information from the compiler. | ||
- | ===== The missing piece: .debug_section | + | ===== The missing piece: .debug_info section |
- | C compilers can store additional information to the compiled output in program sections. For ELF files, there is an optional '' | + | C compilers can store additional information to the compiled output in program sections. For ELF files, there is an optional '' |
For different compilers exist different tools to access the debug section content. For GCC, there is objdump, for IAR there exists ielfdump. Both allow to print the debug section in a human-readable form. However, the structure is not documented and requires the programmer to reverse engineer it. (For GCC it is open-source, | For different compilers exist different tools to access the debug section content. For GCC, there is objdump, for IAR there exists ielfdump. Both allow to print the debug section in a human-readable form. However, the structure is not documented and requires the programmer to reverse engineer it. (For GCC it is open-source, | ||
Line 243: | Line 243: | ||
This is a lot of output. Let's explain the different parts. | This is a lot of output. Let's explain the different parts. | ||
+ | |||
+ | Each line represents either the start of a new entity or adds an attribute to one. All entities and attributes have a unique address, encoded in hex. Each entity has a type, which determines the attributes it has. | ||
Fist, it tells us what format the file has. In this case it is a '' | Fist, it tells us what format the file has. In this case it is a '' |
info/c_memory_structure.txt · Last modified: 2012/10/16 17:23 by moritz