私のスタックシミュレーター(7月8日水曜日) ノート

私のスタックシミュレーター(7月8日水曜日)

スタックは、プログラムがローカル変数やリターンアドレスのような一時データを格納するメモリ領域です。スタックをキッチンの皿の山と考えてください。新しい皿は一番上にしか置けず、取り出すのも一番上からしかできません。プログラムはこの「後入れ先出し」の原則を使って、何をしているかを追跡します。関数が呼び出されるたびに、プログラムはローカル変数や関数終了後に戻るアドレスなどの情報を含む新しい皿をスタックにプッシュします。関数が終了すると、その皿は一番上からポップされ、実行は中断した場所から正確に再開されます。この単純なメカニズムにより、プログラムは関数内で関数を呼び出し、さらにその中で関数を呼び出すことができ、常に元の場所に戻ることができます。しかし、スタックが大きくなりすぎたり、予期しないデータで上書きされたりすると、攻撃者がプログラムの実行フローを乗っ取るための格好の標的となるのも、まさにこのためです。
CdXz5zHNQW_vz6S9CI9sK.png