上一篇使用readelf查看了.debug_info调试信息,现在我们对它进行分析。首先将调试信息保存到文档中:
readelf -wi test > out.txt
结构体分析
首先,我在结构体里定义了一个char型和一个double型,编译连接后查看调试信息,然后改变结构体中成员类型,查看内存分配方式。
1. 在调试信息中找到main函数,可以看到main函数前面的<1>表示他是第一级。DW_AT_frame_base表示栈指针的位置。DW_AT_low_pc和DW_AT_high_pc表示这段程序的开始和结束位置。紧接着往下看,可以看到一个块,就是<2>处。再往下就可以看到快里面有我定义的一个结构体:blabla。DW_OP_plus_ fbreg:-32表示栈指针减去32就可以得到该变量的位置。
2. 根据DW_AT_type即变量的类型:0x1353在调试信息里面找。如图:
可以看到,这个结构体大小是16个字节。第一个成员名字是a,它的内存从结构体开始处分配,在调试信息里找它的类型,可以看到它是char型,大小是一个字节: