関数を呼び出すと、その関数内でjmp
コマンドを使用して、別の関数の一部に戻ることはできますか?つまり、このコードは有効です:関数から関数へのJmp?
testfunction PROC
jmp jumppoint
ret
testfunction ENDP
main PROC
jumppoint:
call testfunction
main ENDP
END
これが有効であれば、無限ループを生成するはずです。はい・いいえ?
関数を呼び出すと、その関数内でjmp
コマンドを使用して、別の関数の一部に戻ることはできますか?つまり、このコードは有効です:関数から関数へのJmp?
testfunction PROC
jmp jumppoint
ret
testfunction ENDP
main PROC
jumppoint:
call testfunction
main ENDP
END
これが有効であれば、無限ループを生成するはずです。はい・いいえ?
「有効」とは、アセンブラで実行することを意味します。答えは「はい」です。無限ループの一種を紹介します。しかし、call
命令は、実行するたびにスタック(復帰アドレス)に関する追加情報を配置するため、最終的にスタックがオーバーフローし、プログラムがクラッシュします(リアルモードで実行している場合はそうでないかもしれません)。
これは有効であり、無限ループを生成するようですが、それを実行して、正しいかどうかを確認してください。もちろん
それが有限であるため、スタックがオーバー続く0xFFFFFFFF
>= esp
> 0