2012-04-17 10 views
-1

関数を呼び出すと、その関数内でjmpコマンドを使用して、別の関数の一部に戻ることはできますか?つまり、このコードは有効です:関数から関数へのJmp?

testfunction PROC 
    jmp jumppoint 
    ret 
testfunction ENDP 


main PROC 
jumppoint: 
    call testfunction 
main ENDP 
END 

これが有効であれば、無限ループを生成するはずです。はい・いいえ?

答えて

2

「有効」とは、アセンブラで実行することを意味します。答えは「はい」です。無限ループの一種を紹介します。しかし、call命令は、実行するたびにスタック(復帰アドレス)に関する追加情報を配置するため、最終的にスタックがオーバーフローし、プログラムがクラッシュします(リアルモードで実行している場合はそうでないかもしれません)。

0

これは有効であり、無限ループを生成するようですが、それを実行して、正しいかどうかを確認してください。もちろん

それが有限であるため、スタックがオーバー続く0xFFFFFFFF>= esp> 0

関連する問題