我有一个程序可以在 Ghidra 中反编译以包含该行
temp_5f2f2f81bc = *(CPedIntelligence **)(&DAT_000010c0 + (longlong)pCVar2);
temp_5f2f2f81bc
是一个CPedIntelligence*
。pCVar2
是 a CPed*
,并且在 offset 处CPed
有 a 。所以这应该反编译为. 有没有办法告诉 Ghidra“不,不应该被施展到 longlong?”CPedIntelligence*
0x10c0
temp_5f2f2f81bc = pCVar2->intelligence;
pCVar2
我注意到其他时候也会发生这种情况,它通常似乎与存储在寄存器中的结构相关联(这里,pCVar2
存储在 中R13
)。但是,在函数的局部变量中,pCVar2
被列为存储在HASH:5f32eb8...
该寄存器中,除了作为 this 的存储之外,该寄存器从未在该函数中使用CPed*
,所以如果我可以强行告诉反编译器“该寄存器在整个函数中都具有这种类型”,那么会帮助。我尝试使用脚本创建一个存储在 中的局部变量R13
,但反编译器没有发现它。