我无法理解 Ghidra 中的这个特定符号
逆向工程
拆卸
x86
吉德拉
2021-06-29 10:46:43
1个回答
LEA表示“加载有效地址”,即不是将地址ESP+8的内容加载到EAX寄存器中,而是直接加载地址,即寄存器ESP的内容增加8。
例如,如果ESP寄存器(扩展堆栈指针)中的值为1000,则情况可能是这样的:
然后您的指令LEA EAX, [ESP+8]将数字1008加载到EAX寄存器中——堆栈中第三个值的地址。
换句话说,EAX将包含指向值 531的地址(一个指针)。
比较:
如果您将LEA指令替换为以下指令MOV:
LEA EAX, [ESP+8] ; original (LEA): EAX = 1008
MOV EAX, [ESP+8] ; replaced (MOV): EAX = 531
然后EAX寄存器将加载堆栈中的值,即531。
笔记:
为什么指向堆栈的指针?
因为函数的参数一般都是入栈的。
因此,在您的代码中,您可能获得了一个指向特定(第二个?)参数的指针。部分
EAX => local_18是什么意思?Ghidra 的反编译器(到 C 语言)不知道原始指令(和变量名称),因此它会创建名称作为您的
local_18.在列表中(反汇编)
EAX => local_18意味着:“在这个位置,你的变量
local_18以EAX寄存器的形式使用 ”。(这个变量不在内存中——它的值直接在EAX寄存器中。)
其它你可能感兴趣的问题

