2011-09-26 50 views
0

我在论坛中碰到了一个关键记录程序。我虽然可以自己创建一个键盘记录器。当我正在阅读代码以查看该程序中实际发生的事情时,我遇到了一些有趣的事情。为什么要通过寄存器来变量变量,而不是直接用汇编语言推送变量?

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

1)我想不出现在的机器有什么优点,但是回到当天,你只能推注册表。没有推式内存/形式。

2)简单/与#1相同。我听说现在的字符串指令几乎都被弃用了。然而,当天他们是唯一一种飞行速度更快的方法(周期时间并不好,但是通过不强制执行更多指令加载来节省了当天非常有限的内存带宽)。