小编bea*_*mmy的帖子

Ghidra 使用奇怪的字段名称(如“._0_4_”)来表示 C 反编译中的非默认访问大小

我一直在使用 Ghidra 反编译一些最初为 ARMv7 编译的 .o 库文件,其中我有一些函数和结构的头文件。

假设一个结构体有几个单字节“char”成员:

struct myStruct {
   char memberA;
   char memberB;
   char memberC;
   char memberD;
} structInstance;
Run Code Online (Sandbox Code Playgroud)

如果汇编代码(可能是在构建时通过编译器优化)偷工减料并一次性访问整个 32 位字的字符,那么反编译的 C 代码将表示为:

structInstance._0_4_
Run Code Online (Sandbox Code Playgroud)

第一个数字 (0) 是起始字节的偏移量,第二个数字 (4) 是正在访问的字节数。

然而,据我所知,这是非标准的并且不会重新编译 - 至少在 GCC 中不会,而且我在任何地方都找不到任何对此表示法的引用。

有什么方法可以将 Ghidra 设置为生成实际上有效的反编译代码 - 即

*(uint32_t)&structInstance.memberA
Run Code Online (Sandbox Code Playgroud)

c decompiling reverse-engineering ghidra

5
推荐指数
0
解决办法
1288
查看次数

标签 统计

c ×1

decompiling ×1

ghidra ×1

reverse-engineering ×1