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