首页 > 解决方案 > 确定 C 结构是否已打包

问题描述

我正在使用 gdb-python 提取和执行 C 结构布局。

我设法获取所有字段、偏移量、类型和大小。

尽管如此,当尝试重新生成结构的代码时,我没有任何迹象表明它是否标有 GCC 的attribute((__packed__)).

有没有办法从可执行文件中获取这些信息?(最好使用 gdb-python,但任何其他方式也可以)

标签: gccgdbgdb-pythonpahole

解决方案


有没有办法从可执行文件中获取这些信息?

不,但是您应该能够通过简单的启发式推断出这一点:

  • 如果sizeof(struct foo)大于其成员字段大小的总和,则不打包该结构。
  • 如果sizeof(struct foo)等于其成员字段大小的总和,则结构要么被打包,要么其成员自然对齐而没有孔,并且打包对它无关紧要。

推荐阅读