この回答があなたの質問に答えていないことは承知していますが、何らかの助けになることを願っています。
「マジック ナンバー」は、実際には、アプリケーションと、検出したい、または予想しているメモリ破損のタイプの両方に依存する必要があります。
タスクのスタック全体を 0xEE で初期化する OS を見てきました。この値は、簡単に認識でき、ほとんどの人が使用する可能性は低いです。このメソッドを使用して、0xEE バイトをカウントすることにより、未使用のスタック スペースの量を推測できます。それは完璧ですか?しかし、それは速く、(かなり)安く、簡単に行うことができます. これの利点の 1 つは、破損しているバイトを簡単に特定できる場合があることです (0xEE バイトの海に 0xEE 以外のバイトがいくつかある場合など)。基本的な考え方は、他の分野にも転用できるものでなければなりません。
カスタム ルートに進み、データ構造ごとに一意のマジック ナンバー (CRC など) を持つことができます。コストはかかりますが、データ構造が破損しているかどうかを検出するのに適しています。どこで、どのように、いつ破損したかはわかりませんが、破損したかどうかはわかりません。残念ながら、これは人間が読めるリクエストに失敗します。
メモリ ブロックが十分に大きい場合は、MMU を利用して、メモリ ブロックへの書き込みをデフォルトで無効にし、変更が必要な期間だけ有効にすることで、メモリ ブロックを保護することが可能で実用的です。この方法では書き込みパフォーマンスが低下しますが、いつ、どこで、誰によって破損が発生しているかを検出するのに役立ちます。これにより、マジックナンバーが完全になくなります。
お役に立てれば。