Сейчас на форуме: ==DJ==[ZLO], Magister Yoda, Rio (+6 невидимых)

 eXeL@B —› Основной форум —› ::Гипотезы::
Посл.ответ Сообщение


Ранг: 55.8 (постоянный), 6thx
Активность: 0.030
Статус: Участник
[www.AHTeam.org]

Создано: 09 февраля 2005 11:43
· Личное сообщение · #1

Рискну предположить:
1. Что если, стоя на ЕР, флаг DF выставить в единицу, то прога при запуске или работе упадет.
2. Если длл запакована, то после распаковки надо восстанавливать все ее регистры и стэк, который был в начале, иначе упадет (у ехе можно особо за этим не следить).
3. Как после SEH восстановить стэк, на тот, который был до него, а также регистры?




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 09 февраля 2005 13:22
· Личное сообщение · #2

FEUERRADER пишет:
1. Что если, стоя на ЕР, флаг DF выставить в единицу, то прога при запуске или работе упадет.

ну и ? =) думаю выставленный флаг TF прогу тоже не сильно обрадует ;)

FEUERRADER пишет:
3. Как после SEH восстановить стэк, на тот, который был до него, а также регистры?

тоесть ? там и так всё восстанавливается с учётом изменений которые внутри обработчика были внесены в структуру context... а уж что там было изменено - это зависит от обработчика.



Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 09 февраля 2005 17:51 · Поправил: S_T_A_S_
· Личное сообщение · #3

FEUERRADER пишет:
1. Что если, стоя на ЕР, флаг DF выставить в единицу, то прога при запуске или работе упадет.


Да, про это микрософт пишет где-то в MSDN. любая функция скомпилированная MSVC (в том числе и WinAPI) не изменяют регистры ebx, esi, edi, ebp, esp и ожидают, что df = 0.



Ранг: 186.8 (ветеран)
Активность: 0.040
Статус: Участник

Создано: 09 февраля 2005 18:58 · Поправил: MoonShiner
· Личное сообщение · #4

2. Ну ясно про стек, если посмотреть, как либа возвращает (должна возвращать=) управление после инициализации. 3. Система сама восстановит из контекста значение всех регистров. Естественно, если ты вернешь ей управление... А так - структура контекста расписывается здесь http://wiki.forth.org.ru/StructuredExceptionsHandling http://wiki.forth.org.ru/StructuredExceptionsHandling или в windows.inc. Т.е. запросто можно вытащить ручками значение всех регистров и даже Drx=). Т.е. если обработчик исключений у тебя состоит из
mov eax,ExceptionContinueExecution
ret
, то управление вернется на инструкцию, вызвавшую исключение с восстановлением первоначальной картины (регистры, стек и т.д.), даже если в обработчике ты будешь усиленно извращаться со значениями регистров (кроме esp,ebp). Здесь возможны мелкие нюансы, но они не суть важны.


 eXeL@B —› Основной форум —› ::Гипотезы::
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати