某些结构类型的成员不相邻堆叠。在此处查看bzip2_base (x86-64) 中 0x33E6 处的结构类型。在位置偏移 0 处有一个 int,在 4 处有一个字符,然后在 5004 处有一个 int!等等,这使结构的大小增加到 5104 字节,尽管它只包含 int 和 char 变量(每个变量 3 个)以及一个名为 strm 的结构,其长度为 640 字节。
结构类型的成员如何在堆栈上定位?
逆向工程
小精灵
结构
调试符号
堆栈变量
类型重建
2021-06-18 11:04:47
1个回答
第二构件,称为buf(在位置4)是不一个char。该成员的类型定义在0x3451,这是一个数组类型。它的元素是在 处定义的每个类型0x2d04,它是一个名为 的 typedef Char,它重定向到0x29b7,确实是char(表示为基类型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
所以该成员的类型是一个包含 5000 个Char对象的数组char。所以当buf从偏移 4 开始时,下一个对象从偏移 5004 开始也就不足为奇了。
其它你可能感兴趣的问题