0

実験と試行錯誤の目的で、次の短い x64 アセンブリ プログラムを作成しました。

.code
AsmFun proc
    mov rax, MyLabel
    mov byte ptr [rax], 0C3h    ; C3 is x64 machine code for "ret"
MyLabel:
    mov rax, 239847             ; This isn't "ret"
AsmFun endp
end

(その後、C からコードを呼び出しました。)

コンパイル/アセンブル/リンクは正常に行われますが、プログラムを実行すると、Visual Studio は未処理の例外が発生したと不平を言います:「[MyLabel] としてのアクセス書き込み違反」。 「[MyLabel]」ではなく、たまたまメモリ内にあるアドレスです。

なぜこうなった?セキュリティの悪用を避けるために導入されたのは Windows のものですか?

4

1 に答える 1