Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ЛОгирование исключений


@!!ex ©   (2010-10-06 19:35:00) 

Нашей некий код, заменяющий стандартную функцию RTLUnwindProc:
procedure MyRtlUnwind; stdcall;
var
 PER : PExceptionRecord;
 procedure DoIt;
 begin
   //обработка исключения
 end;
begin
 asm
   mov eax, dword ptr [EBP+8+13*4]      
   mov PER, eax
 end;

 DoIt;

 asm
   mov esp, ebp
   pop ebp
   jmp oldRTLUnwindProc
 end;
end;

Объясните пожалуйста, что делает ассемблерная вставка?
Ну вторую часть я понял - вызов стандартного обработчика... А первая?? До DoIt??


Игорь Шевченко   (2010-10-06 21:33:00) [1]


> Объясните пожалуйста, что делает ассемблерная вставка?

http://msdn.microsoft.com/en-us/library/ms680609(VS.85).aspx
http://www.wasm.ru/article.php?article=Win32SEHPietrek3


Rouse_   (2010-10-06 20:36:00) [2]

Посмотри Jedy там идет правильный хук обработчика исключений с выводом стека фреймов исключений


@!!ex   (2010-10-06 19:47:00) [3]

Подбором вычислил - 8+14*4


@!!ex   (2010-10-06 19:40:00) [4]

в смысле первая тоже понятно, устанавливает указатель на структуру... но откуда взять актуальное число для указателя??


@!!ex   (2010-10-06 19:37:00) [5]

Вообще этот код на TDE работает...
Но!

в DoIt есть вот такой блок:
   if PER^.ExceptionFlags and 1=1 then      // This seems to be an indication of internal Delphi exception,
   begin                                    // thus we can access 'Exception' class
     try
       E := Exception( PER^.ExceptObject);
       if (E is Exception) then
         s:=s+'Delphi exception, type '+E.ClassName+', message: '+E.Message+#13#10;
     except
     end;
   end;

Который должен давать доп. инфу... вот он не работает. Как я понимаю из-за неверного кода в ассемблерной вставке(пример сделан для D7, а я пишу на TDE, видимо RTL слегка изменился).
Гуглить пробовал, вся инфа идет времени D7.


Наверх

Титульная страница Поиск, карта сайта Написать письмо