如何获取 Ghidra 脚本中指令的推断寄存器值?
逆向工程
x86
吉德拉
x86-64
登记
脚本
2021-06-19 05:45:03
1个回答
在稍微研究一下之后,我认为这将在很大程度上取决于确切的上下文。
在这种情况下,调用指令的 PCode 操作已经是:
(register, 0x0, 4) CALL (ram, 0x125180, 8) , (const, 0x1, 4) , (const, 0x5413, 8)
[0],即它已经包含传播的常量,没有任何从寄存器读取它们的引用。
如果您幸运的话,ardmsr
或a 的相关 PCode 操作wrmsr
已经包含此信息。不过,我没有二进制文件来测试这些指令是如何准确处理的。如果它们以任何形式包含它们依赖于值的信息,ecx
那么我希望反编译器将优化 PCode 指令,以在可能的情况下直接使用常量作为 PCode 参数,就像在附加的图像中一样。快速浏览一下x86.sla
似乎RDMSR
确实以允许这种情况发生的方式定义。
反编译器内部发生的任何类型的值分析的一般结果都不会以我所知道的方式公开。
[0] 这不是来自指令的 PCode,而是来自反编译器令牌。您可以通过单击令牌来获取此信息(例如ioctl
在反编译器中,然后currentLocation.token.pcodeOp
在 Jython shell 中访问)