![]() |
eXeL@B —› Основной форум —› Помогите разобраться с SEH |
Посл.ответ | Сообщение |
|
Создано: 24 апреля 2006 13:58 · Личное сообщение · #1 Всем привет! Я занимаюсь написанием утилиты по автоматической распаковке запакованных файлов, справился с WinUpack, NsPack, UPX, PeCompact, AsPack, Fsg и некоторыми другими. Столкнулся со следующей проблемой: где можно найти подробную инфу по много каскадным SEH? статей на wasm.ru не достаточно. В PeCompactе применяются seh, но однокаскадные, а если взятьYoda то сразу кранты справиться не могу. Еще проблема не могу разобраться что и в какой последовательности Windows помещает в стек при возникновении исключения? Заранее благодарен !!! ![]() |
|
Создано: 24 апреля 2006 14:10 · Личное сообщение · #2 Еще сопутствующий вопрос: в док-ции по seh написано, если обработчик возвратил EXCEPTION_CONTINUE_SEARCH = 0, то попробывать обработать исключение следующим обработчиком, НО в PeCompact-e возникает исключение, после обработке, которого возвращается 0, но передать управление нужно программе. В чем прикол? ![]() |
|
Создано: 24 апреля 2006 14:36 · Личное сообщение · #3 mag3d пишет: EXCEPTION_CONTINUE_SEARCH = 0 0 = EXCEPTION_CONTINUE_EXECUTION push SEH_frame push dword [fs:0] mov dword [fs:0], esp int 3 <...> SEH_frame: mov eax, [esp+0Ch] inc dword [eax+0B8h] xor eax, eax retn 4*4 И всё нормально работает. Держи аттач, надеюсь английский знаешь хорошо, там даже про процесс передачи информации об исключении в отладчик и приложение есть (UnhandledExceptionFilter, BaseProcessStart - их псевдокоды) а также способы обнаружения отладчиков. ![]() ![]() |
|
Создано: 24 апреля 2006 14:43 · Личное сообщение · #4 |
|
Создано: 24 апреля 2006 14:49 · Личное сообщение · #5 |
|
Создано: 24 апреля 2006 15:08 · Личное сообщение · #6 В статье: www.wasm.ru/article.php?article=green2red03 по поводу возврата управления идет путаница: в рачале он говорит, что: eax = 1 - ОС вызывает следующий обработчик в цепочке eax = 0 - перезагружаем контекст и продолжаем, далее по тексте идет путаница: Обработчик возвращает 1 или константу ExceptionContinueExecution, чтобы сообщить операционной системе, что обработчик обработал исключение и необходимо продолжить выполнение программы в контексте указанной в структуре CONTEXT. Так как правильно? И мне непонятно всегда ли управление передается по занчением записанным в структуре CONTEXT, или есть другие случае (в случае если исключение обработано)? ![]() |
|
Создано: 24 апреля 2006 15:10 · Личное сообщение · #7 |
|
Создано: 24 апреля 2006 15:40 · Личное сообщение · #8 |
|
Создано: 24 апреля 2006 16:50 · Личное сообщение · #9 |
|
Создано: 24 апреля 2006 16:51 · Поправил: NullSession · Личное сообщение · #10 |
|
Создано: 24 апреля 2006 20:25 · Личное сообщение · #11 |
|
Создано: 24 апреля 2006 21:41 · Личное сообщение · #12 |
|
Создано: 24 апреля 2006 21:48 · Личное сообщение · #13 |
|
Создано: 25 апреля 2006 05:20 · Личное сообщение · #14 |
![]() |
eXeL@B —› Основной форум —› Помогите разобраться с SEH |