3

教育目的で x86 アセンブラーの自己変更コードを示す数行の長い例を探しています (何か意味のあることをする必要はありませんが、コード自体を読んだときにそれを実行する必要があります)。

Web を少しブラウジングしましたが、すべての例が複雑すぎるか、説明が不十分です。適切な場所を見逃している可能性があるため、お気軽にリンクまたはコードを提案してください。

4

1 に答える 1

6

多くのプロセッサは、コードが変更された直後に変更を認識できず、代わりに古いバイトを実行します。たとえば、次のコードは、「inc」命令が「nop」で上書きされた後でも、(ほとんどの場合) eax をインクリメントします。ほとんどの場合、eax=1 が表示され、'mov' の後に例外が発生した場合は eax=0 になります。

; Intel syntax

.arch   i386
.text
start:
        xor     %eax, %eax
        mov     word ptr change, 0x9090
change: inc     %eax
        nop
        ret

EFLAGS.TF=1 の場合、eax は常に 0 になります。これが役立つかどうかは別の話です。昔、友人が難読化の目的で自己変更コードを使用し、実際に変更を無視するためにプロセッサに依存する上記のようないくつかのトラップがありました。

于 2012-08-29T17:56:28.167 に答える