Я только что создал новый exe vc ++ с этим простым кодом:
#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;
}
Приложение очень простое, и создается файл exe в зависимости от kernel32.dll и MSVCR100D.dll.
Когда я пытаюсь импортировать и отладить его в OllyDbg (я просто хотел увидеть цепочку SEH в окне стека), он говорит: «Модуль 'testseh' имеет точку входа вне кода (как указано в заголовке PE).Возможно, этот файл является самораспаковывающимся или самоизменяющимся. Помните об этом при установке точек останова! "и никакой код не выполняется, он переходит непосредственно к части сбоя ntdll.dll (на самом деле exe падает, но я не могу пошагово выполнить инструкции printf)
Как происходит такое поведение?Exe не зависит ни от CLI, ни от CLR, я что-то упустил?