Форум: "Начинающим";
Текущий архив: 2011.01.02;
Скачать: [xml.tar.bz2];
ВнизЛОгирование исключений Найти похожие ветки
← →
@!!ex © (2010-10-06 19:35) [0]Нашей некий код, заменяющий стандартную функцию 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??
← →
@!!ex © (2010-10-06 19:37) [1]Вообще этот код на 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.
← →
@!!ex © (2010-10-06 19:40) [2]в смысле первая тоже понятно, устанавливает указатель на структуру... но откуда взять актуальное число для указателя??
← →
@!!ex © (2010-10-06 19:47) [3]Подбором вычислил - 8+14*4
← →
Rouse_ © (2010-10-06 20:36) [4]Посмотри Jedy там идет правильный хук обработчика исключений с выводом стека фреймов исключений
← →
Игорь Шевченко © (2010-10-06 21:33) [5]
> Объясните пожалуйста, что делает ассемблерная вставка?
http://msdn.microsoft.com/en-us/library/ms680609(VS.85).aspx
http://www.wasm.ru/article.php?article=Win32SEHPietrek3
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.01.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.003 c