Есть длл, которая экспортирует методы, надо их перехватить (сплайсингом).
Чтобы их перехватить написана функция InstallHook:
— принимает адрес оригинального метода и адрес перехватчика
— возвращает адрес по которому перехватчик должен вызвать оригинальный метод.
Соответсвенно возникают два вопроса:
1) Как импортировать метод, не вызывая его?
Для того чтобы перехватить функцию, ее вызывать не надо, надо только передать ее адрес установщику перехвата.
А если импортируемая функция не вызывается, компилятор ее не импортирует.
2) Как передать в функцию указатель на любой метод?
Функции-установщику перехвата безразлично какой прототип у функции, адрес которой ей передается, кроме того она должна уметь перехватывать функции адреса которых получаются динамически.
05.11.08 13:58: Перенесено модератором из 'C/C++' — Кодт
Здравствуйте, GoldFinch, Вы писали:
GF>Функции-установщику перехвата безразлично какой прототип у функции, адрес которой ей передается, кроме того она должна уметь перехватывать функции адреса которых получаются динамически.
1) можно просто взять адрес функции. Тогда dll тоже прилинкуется
2) Зачем это всё делать динамически? Можно же и статически всё завернуть. Берёшь, пишешь свою DLL, которая линкует ту, функции которой требуется перехватывать, там просто пишешь свои версии, вызываешь что надо, и когда надо, а потом пишешь в своей Dll-прокладке .DEF файл который экспортирует фейковые функции, как настоящие.
Ну и переименовываешь все файлы потом. И собственно всё
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском