Локальный перехват API-вызовов в Win32

Для тех, кто хочет сделать мир лучше.
Ответить
Сообщение
Автор
Fire666
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2600
Зарегистрирован: 15.02.2007
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 44 раза
Контактная информация:

#1 Сообщение 17.01.2010, 15:11

Здравствуйте.
Подскажите как справиться с задачей:

Нужно перехватить API-вызов к заданной экспортной функции в заданном процессе при определенных аргументах вызова.

приведу пример.

скажем есть программа test.exe и библиотека test.dll
в которой есть экспортная функция

int testfunction ( int arg);

и скажем если передаваемый аргумент arg равен 2, то заменить testfunction на свой вариант,
а если arg равен 3, то не перехватывать и пропустить его

eldest
Разработчик
Разработчик
Сообщения: 302
Зарегистрирован: 17.03.2008
Откуда: такие как я?
Поблагодарили: 2 раза
Контактная информация:

#2 Сообщение 17.01.2010, 17:04

Эммм... памойму можно так
DWORD newadrfunct = testfunction;
патом хукаеш testfunction например на hook(int arg)
ну и патом

Код: Выделить всё

function hook(int arg) {
     if (arg == 2) {
         // svoi variant
     } else if (arg == 3) {
           newadrfunct(arg);
     }
}

Аватара пользователя
x_000
Полковник
Полковник
Сообщения: 4889
Зарегистрирован: 25.02.2008
Откуда: Deutsches Reich
Благодарил (а): 6 раз
Поблагодарили: 18 раз

#3 Сообщение 17.01.2010, 17:07

вернее всего переписывать таблицы экспорта\импорта, однако, это сложно и у меня почему-то не работает, на месте пешного хедера находится ноаксесс страницы
а так да, ставишь в начале функции джамп на хук и все

Ответить