この単純なコードを使用して、新しいvc++exeを作成しました。
#include<stdio.h>
#include<string.h>
#include<windows.h>
int ExceptionHandler(void);
int main(int argc,char *argv[]){
char temp[512];
printf("Application launched");
try
{
throw "error";
}
catch (... )
{
ExceptionHandler();
}
return 0;
}
int ExceptionHandler(void)
{
printf("Exception");
return 0;
}
アプリは非常にシンプルで、kernel32.dllとMSVCR100D.dllに応じたexeファイルが作成されます。
それをOllyDbgにインポートしてデバッグしようとすると(スタックウィンドウにSEHチェーンを表示したかっただけです)、「モジュール'testseh'にはコード外のエントリポイントがあります(PEヘッダーで指定されています)。おそらくこのファイルは自己解凍または自己変更。ブレークポイントを設定するときは、この点に注意してください。」コードは実行されず、ntdll.dllクラッシュ部分に直接ジャンプします(実際にはexeがクラッシュしていますが、printf命令をステップバイステップで実行することはできません)
どうしてこの振る舞いなの?exeファイルはCLIにもCLRにも依存していませんが、何かが足りませんか?