スタックサイズを監視することにより、スタックオーバーフローを防ぐためにどのように?
-
06-09-2019 - |
質問
多くのC / C ++ / Fortranと他のプログラマは、「スタックオーバーフロー」エラーに遭遇しただろう。 私の質問は、あるプログラムが実行されている間、私たちは、スタックのサイズを監視またはチェックすることが可能なツール、プログラムまたは単純なコードスニペットは、ありますか?これは、スタックオーバーフローを引き起こし、最終的に蓄積されている場所特定するために有用であってもよい。
解決
あなたのためにそれをやるのプログラムがあるかどうかは知りませんが、簡単にスタックポインタが(少なくともCおよびC ++で)ある関数内で確認することができます。ただ、任意の変数のメモリ位置を見てください。これは、正確な場所ではありませんが、ローカル変数はスタック上に定義されているので、(あなたの目的で結構です)数バイト以内でなければなりません。あなたは正確な値が必要な場合は、私は信じているアセンブリを介してこれを取得することができます。
これはしかし、ときに、プログラムがクラッシュしただけでスタックトレースを見てする方が簡単かもしれません。
他のヒント
この質問するを見てください。受け入れ答えはレイモンドチェンを挙げます:
If you have to ask, you're probably doing something wrong.
あなたは間違いなくそれを実行する必要がある場合は、、その後、溶液/ツールは、プラットフォームに依存することになります。一つの簡単なトリックは、既知のバイト値(例えばAA)とのスタックを充填し、この値を持たない最初のバイトの位置を監視することです。これはあなたの使用ではなく、現在のスタックサイズを最大スタックサイズが得られます。
所属していません StackOverflow