4

我一直在使用 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
4

0 回答 0