putchar
、push
と を少しいじっていましたpop
。の値をプッシュしrcx
て何かを実行し、呼び出しputchar
て rcx に戻そうとしたところ、 の値rcx
が 0 に変更されていることがわかりました。コードの最初のビットと同様です。
比較のために、コードの 2 番目のビットを作成しました。ここでは、 をプッシュrcx
し、そうではないことを行い、それをputchar
に戻しますがrcx
、rcx
プッシュされた値のままです。
mov rcx, 123
push rcx
inc rcx
call [putchar]
pop rcx
call [putchar]
mov rcx, 123
push rcx
inc rcx
pop r12
call [putchar]
mov rcx, r12
call [putchar]
putchar
実際にスタックをクリアしますか? これからスタック(または少なくともその重要な部分)を保護する方法を知っている人はいますか?