STATUS_STACK_BUFFER_OVERRUN
ときどきエラー ( )をスローする C コードがあり0xC0000409
ます。以下の C コードを使用して、そのエラーを再現できます。Windows 7 で Visual Studio 2013 Update 4 を使用しており、/EHaおよび/GSフラグを使用してコンパイルしています。ただし、プログラムでエラーをキャッチできませんでした。コードが私の__except
ブロックに入ることはありません。代わりに、Visual Studio は、スタックの破損を知らせるいくつかのダイアログ ボックスを表示します。このエラーが発生すると、プログラムの状態が疑わしいことに気付きます。本番コードでエラーが発生している場所を特定するために、エラーをキャプチャしようとしているだけです。このエラーをプログラムで処理する方法はありますか?
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#pragma warning(disable: 4996) // strcpy
void vulnerable(const char* str)
{
char buffer[10];
strcpy(buffer, str); // overrun the buffer
}
int main()
{
__try
{
char large_buffer[] = "This string is longer than 10 characters.";
vulnerable(large_buffer);
}
__except (GetExceptionCode() == STATUS_STACK_BUFFER_OVERRUN)
{
printf("error"); // never getting here
}
}