1

Some of the structure types have members that are not stacked next to each other. Check out the structure type at 0x33E6 in bzip2_base (x86-64) here. There's an int at location offset 0, a char at 4 and then an int at 5004! and so on, which brings up the size of the struct to 5104 Bytes, although it only consists of int and char variables (3 of each) with a struct called strm which is 640 Bytes long.

3

The second member, called buf (at location 4) is not a char. The type of that member is defined at 0x3451, and this is an array type. Its elements are each of the type defined at 0x2d04, which is a typedef named Char, which redirects to 0x29b7, which is indeed char (represented as base type signed char).

 <1><3451>: Abbrev Number: 11 (DW_TAG_array_type)
    <3452>   DW_AT_type        : <0x2d04>       ==> Char   ==> (signed) char
    <3456>   DW_AT_sibling     : <0x3462>       ==> just management info
 <2><345a>: Abbrev Number: 25 (DW_TAG_subrange_type)
    <345b>   DW_AT_type        : <0x29a8>       ==> indexed by "sizetype"
    <345f>   DW_AT_upper_bound : 4999           ==> indices are 0..4999
 <2><3461>: Abbrev Number: 0

So the type of that member is an array containing 5000 Char objects which are char objects. So it is not surprising that when buf starts at offset 4, the next object starts at offset 5004.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.