アセンブリ言語プログラミングで、データや命令が破壊されるまでスタックが成長するのを妨げているものは何ですか?
4 に答える
通常は OS によって行われる CPU/MMU 構成のみが、スタック オーバーフローやメモリの破損、または必要な権限を持たない何かへのアクセスの試みを防止または傍受できます。
詳細については、Intel/AMD の x86 CPU マニュアルのメモリ管理に関する章を参照してください。
受け入れられたスタックの下限のすぐ下でカナリアを使用して、カナリアの値を常にチェックできます。
カーネルランド コード (リング 0)では、デバッグ レジスタ、、およびのいずれかの値をブレークポイント アドレスの線形アドレスに設定することで、ハードウェア ブレークポイントを設定することもできます。レジスタのビットを確認し、ブレークポイント ハンドラ コードで状況を報告または修正しようとします。HardWare BreakPoints The Definitive Guideを参照してください。dr0
dr1
dr2
dr3
dr7
スタックが成長してデータや命令を破壊するのを防ぐものは何ですか?
あなた!アセンブリでコーディングする場合、手持ちはまったくありません。すべての値がバッファーに収まるようにし、すべてのポインター インデックスが境界内にあることを確認する必要があります。スタックにスペースを確保し、そのバッファーに収まるものが何であるかを確認します。アセンブリを使用している間、プログラミングのすべての側面を担当します。
スタック オーバーフローの原因の 99.99% は、プログラムのバグまたは不適切なプログラム設計です。
ここで、2 つの基本的な質問がありますが、このトピックからは外れています。
1) アセンブリのバグを防ぐ方法は?
2) 良いプログラム設計を行うには?