4

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
   }
}
4

0 に答える 0