使用.debug_info调试信息查看结构体、位域变量内存分配

本文通过.debug_info调试信息深入分析结构体和位域的内存分配规则,探讨不同成员类型如何影响内存对齐,以及位域如何连续存储和填充内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       上一篇使用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型,大小是一个字节:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值