Ghidra 重命名 EAX

逆向工程 吉德拉
2021-07-09 02:33:38

Ghidra 正在重命名EAXparam_1. 为什么会这样?我觉得这很令人困惑,因为它显然不是参数,并且 的不同用法EAX被命名为好像它们具有相同的值。

在此处输入图片说明

2个回答

这是可以通过取消勾选此选项被禁用功能Markup Register Variable Reference的发现Edit -> Tool Options在窗格窗口Options -> Listing Fields -> Operands Field

我个人不会关闭它,因为我怀疑解决这个问题的正确方法是让 Ghidra 识别eax使用存在的局部变量,然后将相应地重命名。这应该只需要对反编译代码进行一些小的清理,甚至可能只需要使用Commit Local Names,它可以在反编译器窗口的上下文菜单中找到。

Ghidra 将 EAX 重命名为param_1因为它是当前函数的参数。此调用约定类似于fastcall,但并不完全相同。选择如何将参数传递给函数取决于编译器,只要代码属于同一个程序。

在代码的开头,param_1(EAX) 包含一个指向OLECHAR对象的指针后来,它被保存到local_8.

@2af4 MOV param_1,EDI. 会将第一个参数设置为下一个调用 @2af6。

因为 EAX 用作代码中许多其他函数的参数,所以param_x即使值明显不同,命名它可能是正确的。在 2b04 上,保存的原始参数被加载到 EAX 中,再次成为下一次调用的第一个参数

就我个人而言,我喜欢使用注册名称而不是重命名它们,但是您在这里看到的确实有意义。

编辑:您可以看到在调用外部函数时,例如FindResourceW调用约定发生了变化并且param_1现在在堆栈上。这是它以绿色而不是黄色显示的地方。