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

プログラムは、上記の例のように値を割り当てるためにプッシュ/ポップを使用しました。

上記の規則の利点は何ですか?

4

1 に答える 1

1

1) 現在のマシンでの利点は思いつきませんが、昔は、reg をプッシュすることしかできませんでした。push mem/immed フォームはありませんでした。

2) シンプルさ/#1 と同じ。最近では、文字列命令はほとんど非推奨になっていると聞きました。ただし、昔は、はるかに高速だったので、飛行する唯一の方法でした (サイクル時間はそれほど良くありませんが、より多くの命令ロードを強制しないことで、その日の非常に限られたメモリ帯域幅を節約しました)。

于 2011-09-27T19:31:01.077 に答える