我们有一些C代码会偶尔抛出STATUS_STACK_BUFFER_OVERRUN
错误(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
}
}