перехват методов
От: GoldFinch  
Дата: 04.11.08 11:28
Оценка:
Есть длл, которая экспортирует методы, надо их перехватить (сплайсингом).
Чтобы их перехватить написана функция InstallHook:
— принимает адрес оригинального метода и адрес перехватчика
— возвращает адрес по которому перехватчик должен вызвать оригинальный метод.
Соответсвенно возникают два вопроса:
1) Как импортировать метод, не вызывая его?
Для того чтобы перехватить функцию, ее вызывать не надо, надо только передать ее адрес установщику перехвата.
А если импортируемая функция не вызывается, компилятор ее не импортирует.
2) Как передать в функцию указатель на любой метод?
Функции-установщику перехвата безразлично какой прототип у функции, адрес которой ей передается, кроме того она должна уметь перехватывать функции адреса которых получаются динамически.

05.11.08 13:58: Перенесено модератором из 'C/C++' — Кодт
Re: перехват методов
От: Erop Россия  
Дата: 04.11.08 13:14
Оценка:
Здравствуйте, GoldFinch, Вы писали:

GF>Функции-установщику перехвата безразлично какой прототип у функции, адрес которой ей передается, кроме того она должна уметь перехватывать функции адреса которых получаются динамически.


1) можно просто взять адрес функции. Тогда dll тоже прилинкуется
2) Зачем это всё делать динамически? Можно же и статически всё завернуть. Берёшь, пишешь свою DLL, которая линкует ту, функции которой требуется перехватывать, там просто пишешь свои версии, вызываешь что надо, и когда надо, а потом пишешь в своей Dll-прокладке .DEF файл который экспортирует фейковые функции, как настоящие.
Ну и переименовываешь все файлы потом. И собственно всё
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: перехват методов
От: GoldFinch  
Дата: 10.11.08 16:49
Оценка:
Здравствуйте, Erop, Вы писали:

E>1) можно просто взять адрес функции. Тогда dll тоже прилинкуется

E>2) Зачем это всё делать динамически? Можно же и статически всё завернуть. Берёшь, пишешь свою DLL, которая линкует ту, функции которой требуется перехватывать, там просто пишешь свои версии, вызываешь что надо, и когда надо, а потом пишешь в своей Dll-прокладке .DEF файл который экспортирует фейковые функции, как настоящие.

Ни слова по заданному вопросу %) Интересен именно статический импорт. Статический импорт без вызова функции удаляется. Метод не приводится к типу (char*).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.