Ghidra 的反编译结果什么时候不能信?

反编译器很好用,但它给的是"一个符合语义的 C 表示",不是原始代码。有几种情况我学会了不信它:

1. 类型推断错了
最常见。它把 char* 当成 undefined8,后面整段逻辑都跟着歪。表现是出现大量莫名其妙的位运算。解法是手动定型,改完重新反编译。

2. 栈变量合并
编译器复用栈槽,Ghidra 可能把两个生命周期不重叠的变量认成同一个。看到一个变量前后语义完全不一致,就该怀疑这个。

3. 有 SIMD 的地方
向量指令的反编译输出基本不可读,这时候直接看汇编更快。

4. 手写汇编 / 混淆过的代码
反编译器假设代码是编译器生成的。这个假设一破,输出就可能完全错误——不是难看,是错。

你们还遇到过哪些"反编译器骗我"的情况?