UsrLAsg 在汇编中的含义是什么?

逆向工程 部件 x86
2021-07-09 17:19:15

有时,对装配知之甚少可能是个问题。

 push       ebp
 lea        eax,[ebp-3C0]
 call       005A0E30
 pop        ecx
 mov        edx,dword ptr [ebp-3C0]
 lea        eax,[ebp-20]
 call       @UStrLAsg
 push       ebp
 lea        eax,[ebp-3C4]
 call       005A1568
 pop        ecx

就像上面的代码一样,我试图了解正在发生的事情,但我无法理解lea后面跟有call.

也许如果我知道什么@UstrLAsg意味着我会开始了解那里发生的事情,或者那里的人可以给我一个提示。

2个回答
mov        edx,dword ptr [ebp-3C0]

此指令将 register 设置edx为内存地址 ( ebp-3C0)处的 DWORD 值

lea        eax,[ebp-20]

该指令将寄存器eax设置为值 ( ebp-20);尽管指令中有方括号,但不涉及内存取消引用。

call       @UStrLAsg

此指令调用 Delphi 库函数UStrLAsg(),该函数通过eax接收其输入参数edx一点谷歌搜索表明,该函数用于将本地 Unicode 字符串分配给全局变量,其中edx指向源字符串并eax指向全局变量。

lea代表加载有效地址。它是一种指令,旨在以优化的方式获取一块内存并将其加载到寄存器中。当您看到以下内容时,它也可用于执行添加:

lea eax, [eax+4]

这相当于:

add eax, 4

然后,call @UstrLAsg引用一个符号 ( @UstrLAsg),它给出了可执行内存中的静态地址。找出它在内存中跳转的最好方法是执行程序并在运行时查看符号。它应该揭示静态地址。

希望这对你有所帮助。