gcc - 确定 C 结构是否已打包
问题描述
我正在使用 gdb-python 提取和执行 C 结构布局。
我设法获取所有字段、偏移量、类型和大小。
尽管如此,当尝试重新生成结构的代码时,我没有任何迹象表明它是否标有 GCC 的attribute((__packed__))
.
有没有办法从可执行文件中获取这些信息?(最好使用 gdb-python,但任何其他方式也可以)
解决方案
有没有办法从可执行文件中获取这些信息?
不,但是您应该能够通过简单的启发式推断出这一点:
- 如果
sizeof(struct foo)
大于其成员字段大小的总和,则不打包该结构。 - 如果
sizeof(struct foo)
等于其成员字段大小的总和,则结构要么被打包,要么其成员自然对齐而没有孔,并且打包对它无关紧要。
推荐阅读
- solr - 改进 Solr 搜索查询/过滤器
- azure-data-explorer - 根据计算的失败百分比创建列
- terraform - 如何在模块和提供者之间创建依赖关系(用于刷新)
- xml - 比较游标与管道 xml 解析
- html - 我的网站不会在 iPhone 上加载图像,但会在所有其他浏览器、移动设备或台式机上加载
- python - 将 -infinty 值和 infinity 值替换为数据帧的最大值和最小值
- r - 通过区分 2 行,将新行添加到 R 中的 data.table
- javascript - 如何在 if/else 语句中使用 keydown 事件
- string - 如何用python中的函数返回填充列表?
- javascript - 1-未捕获的错误:不匹配的匿名定义()模块