1、用python elftool解析结构体的成员计算偏移的时候,会用到如下结构体;
 2、data member location 是可变长的(uleb128编码);DW_OP_plus_uconst是操作码;
 uleb128编码,正如其名,是小端结尾的。因此第一个字节代表的是整形值的最低7比特位的值,第二个字节代表整型值的次低7比特位的值,以此类推,最后一个字节(最高位为0)代表整形值的最高7比特位的值。所以,代码中每发现要多用一个字节,都要多向左移动7位。
 如:
 3、如下是一个例子:
 <2><1274c>: Abbrev Number: 8 (DW_TAG_member)
     <1274d>   DW_AT_decl_file   : 1
     <1274e>   DW_AT_decl_line   : 13
     <1274f>   DW_AT_name        : recStamp
     <12753>   DW_AT_type        : <0x12650>
     <12757>   DW_AT_data_member_location: 2 byte block: 23 0     (DW_OP_plus_uconst: 0)
  <2><1275a>: Abbrev Number: 8 (DW_TAG_member)
     <1275b>   DW_AT_decl_file   : 1
     <1275c>   DW_AT_decl_line   : 13
     <1275d>   DW_AT_name        : frameSize
     <12769>   DW_AT_type        : <0x12650>
     <1276d>   DW_AT_data_member_location: 2 byte block: 23 4     (DW_OP_plus_uconst: 4)
...
<127fe> DW_AT_data_member_location: 3 byte block: 23 9c 1 (DW_OP_plus_uconst: 156)
...
<12a4f> DW_AT_data_member_location: 3 byte block: 23 80 2 (DW_OP_plus_uconst: 256)
比如:
 2 byte block: 23 0     (DW_OP_plus_uconst: 0)
 两个字节:长度是 0
 3 byte block: 23 9c 1     (DW_OP_plus_uconst: 156)
 三个字节:
   操作码:字节1 
   偏移:字节2 & 0x7F  |  (字节3 & 0x7F)* 128
              28                    +   1*128                          = 156  
 3 byte block: 23 80 2     (DW_OP_plus_uconst: 256)
 三个字节:长度是 0x280
 偏移:字节2 & 0x7F  |  (字节3 & 0x7F)* 128
              0                      +   2*128                          = 256