SEH
От: Аноним  
Дата: 17.02.11 16:38
Оценка:
Есть вот такой код:

EXCEPTION_DISPOSITION  __cdecl _except_handler( struct _EXCEPTION_RECORD *ExceptionRecord,  void * EstablisherFrame,
                                                 struct _CONTEXT *ContextRecord, void * DispatcherContext )
 {
     // Видимо, здесь нужно вычислить адрес __label1 и сделать ContextRecord->Eip = (DWORD) __label1 и вернуть ExceptionContinueExecution;     
     // Или нет.. 
 }

int main(int argc, CHAR* argv[])
{
    DWORD handler = (DWORD) _except_handler;
    __asm
    {                     
        push    handler   
        push    FS:[0]    
        mov     FS:[0],ESP 
    }    


    __asm {
        xor eax, eax
        call eax
    }

    printf("...");

    __asm
    {                   
        mov     eax,[ESP]
        mov     FS:[0], EAX
        add     esp, 8     
    }

__label1:
    printf("OK");



Как правильно изменить данный код, чтобы исключение было обработано и команда printf("OK") выполнилась?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.