我一直在使用 Ghidra 反编译一些最初为 ARMv7 编译的 .o 库文件,为此我有一些函数和结构的头文件。
假设一个结构有几个单字节“char”成员:
struct myStruct {
char memberA;
char memberB;
char memberC;
char memberD;
} structInstance;
如果汇编代码(可能是在构建时通过编译器优化)正在走捷径并一次访问整个 32 位字的字符,那么反编译的 C 代码将表示为:
structInstance._0_4_
第一个数字 (0) 是要开始的字节的偏移量,第二个数字 (4) 是正在访问的字节数。
但是,据我所知,这是非标准的,不会重新编译 - 至少在 GCC 中不会,而且我在任何地方都找不到对该表示法的任何引用。
有什么办法可以将 Ghidra 设置为生成实际上有效的反编译代码 - 即
*(uint32_t)&structInstance.memberA