powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перехват API функций
7 сообщений из 7, страница 1 из 1
Перехват API функций
    #39472443
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходная задача. Есть служба, которая загружает и выполняет произвольные плагины. В одном из плагинов, написанном на С, создается собственный поток. В этом потоке возникает исключение и падает весь процесс службы.

Мой вариант решения: найти в памяти загруженную kernel32, пропатчить в функции CreateThread первые 5 байт, поставив джамп на мою функцию, в своей функции заменить переданную функцию потока на свою и вызвать оригинальный CreateThread.

Свою функцию потока реализовать так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function MyThreadProc(AParam: Pointer): Integer; stdcall;
begin
  try
    Result := PThreadRec(AParam)^.Func(PThreadRec(AParam)^.Data);
  except
    on E: Exception do begin
      Result := -1;
      WriteToLog(E);
    end;
  end;
  FreeMem(AParam);
end;


Оцените работоспособность и степень кривизны решения

С уважением, Vasilisk
...
Рейтинг: 0 / 0
Перехват API функций
    #39472446
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_, посмотри в сторону SetUnhandledExceptionFilter. Ставь свой обработчик, в нём делай логгинг + ExitThread.
...
Рейтинг: 0 / 0
Перехват API функций
    #39472506
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Я несколько сомневаюсь в совместимости Cшных и дельфийских исключений, но по теме вопроса:
https://github.com/MahdiSafsafi/delphi-detours-library
...
Рейтинг: 0 / 0
Перехват API функций
    #39472534
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

1. Код времён Turbo Pascal 7.0 1992 года.
2. Передавать E в параметре нельзя. Читай, как делфи обрабатывает исключения и освобождает память.
...
Рейтинг: 0 / 0
Перехват API функций
    #39472570
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_, Есть служба, которая загружает и выполняет произвольные плагины.

сделай им песочницу через свой доп процесс, учитывая службы в W10 и GChrom - это нынче трендный тренд.
...
Рейтинг: 0 / 0
Перехват API функций
    #39472576
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B_Vasilisk_,
2. Передавать E в параметре нельзя. Читай, как делфи обрабатывает исключения и освобождает память.
Эээм.... а можно ссылку по теме? Потому что, AFAIK, E существует до выхода из блока Except-End, а куда ты её передаёшь в это время вроде значения не имеет.
...
Рейтинг: 0 / 0
Перехват API функций
    #39472657
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GunSmokerпосмотри в сторону SetUnhandledExceptionFilter.Спасибо. Похоже на правду.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перехват API функций
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]