【问题标题】:Why PUSH a variable via a register, rather than PUSH the variable directly in assembly language?为什么要通过寄存器推送变量,而不是直接用汇编语言推送变量?
【发布时间】:2011-09-26 18:43:58
【问题描述】:

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

以上约定的优点是什么?

【问题讨论】:

    标签: assembly masm masm32 keylogger


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 2016-01-24
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      相关资源
      最近更新 更多