Ghidra 重命名 EAX
逆向工程
吉德拉
2021-07-09 02:33:38
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现在在堆栈上。这是它以绿色而不是黄色显示的地方。
