0

我在论坛的 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 来分配值,如上例所示。

上述约定的优点是什么?

4

1 回答 1

1

1)我想不出当前机器有什么优势,但在过去,你只能推送 regs。没有 push mem/immed 形式。

2) 简单性/与#1 相同。我听说现在字符串指令几乎已被弃用。然而,回到过去,它们是唯一的飞行方式,因为它们的速度要快得多(周期时间并没有好多少,但通过不强制执行更多指令加载,节省了当时非常有限的内存带宽)。

于 2011-09-27T19:31:01.077 回答