c - 反编译一个gch文件

标签 c gcc precompiled-headers

我不小心删除了一个我没有添加到版本控制中的 .h 文件,但我仍然有 .h.gch。有没有办法反编译 .gch?

最佳答案

您可以尝试运行 strings 实用程序。 GCH 定义了很多内部 gcc 宏,所以我建议你用字符串做两个转储:

首先是你的 gch:$ strings file.h.gch

第二个是预编译的空头文件(或者,如果你记得的话,你的头文件中包含了什么——也包含在这个文件中)

然后您可以保存两个转储并进行差异运行:

以我为例:

#define d1234

#undef dsgf

int asdfgh(char a);
int ghjkl(int g, int h);

diff 中所有的名字都在最上面:

1074a1075
> asdfgh
1189a1191
> d1234
1200a1203
> dsgf
1287a1291
> ghjkl

如何获取函数的结构和参数——我不知道。 但我建议您是否可以使用此 pch(例如,将 #include "file.h" 替换为 #pragma GCC pch_preprocess "file.h.gch" )-那么您可以使用 -fdump-tree-all-all-frtl-dump-all-all 进行树和 rtl 转储。一些转储将包含更多信息,这些信息源自丢失的 header 。

关于c - 反编译一个gch文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6417927/

相关文章:

c - 带有 pragma omp parallel for 的嵌套循环,困惑起来

c++ - 如何从 gcc 的预编译头文件中获益最多?

c++ - 自定义预编译头导致编译错误

符合 C 标准的结构对齐方式

c - 跳舞娃娃问题: on GCC linux

c++ - 有没有办法在 VS2008 下禁用某些错误?

c - 使用另一个编译器更快的代码

c - 在 21 点程序中处理 A 并查找段错误

optimization - gcc 生成的虚拟 movups

c++ - 无法在 VS2015 中禁用单个 C 文件的预编译头文件