为什么通过寄存器推送变量,而不是直接用汇编语言推送变量?

时间:2011-09-26 18:43:58

标签: assembly masm masm32 keylogger

我在论坛中遇到了asm的一个关键记录器程序。我虽然可以自己创建一个关键记录器。当我阅读代码以查看该程序中实际发生的情况时,我发现了一些有趣的事情。

1.程序几乎从未将变量推送到堆栈。它将变量的值移动到寄存器,然后按下寄存器。 例如。

;hInst:DWORD 4
lea esi, hInst
push esi

2.程序使用stosd清除数组。 例如:

    ;array1 BYTE 256 DUP(?)
    lea edi, array1
    push 256/4
    xor eax, eax
    rep stosd 3

该程序使用push-pop来分配值,如上例所示。

上述约定有哪些优点?

1 个答案:

答案 0 :(得分:1)

1)我想不出当前机器的任何优势,但回到白天,你只能推动注册。没有push mem / immed形式。

2)简单/与#1相同。我听说现在字符串指令都被弃用了。然而,回到白天它们是唯一的飞行方式,因为它们更快(循环时间不是更好,但通过不强制更多的指令加载来保留当天非常有限的内存带宽)。