Решил реализовать перехват самым первым способом: в начало API-функции записать ассемблерную вставку (далее "прыжок"), которая будет передавать управление моей процедуре.
Принцип такой же как и в статье, только не используется DLL, все делаю в обычном проекте VB6. Пока результат нулевой .
Прыжок представил в виде структуры:
- Код: Выделить всё
Type TJump
Push As Byte
Address As Long
Ret As Byte
End Type
Заполняю таким образом: (FakeProcedureAddress -- хранит адрес "фальшивой" процедуры, полученный через AddressOf)
- Код: Выделить всё
Dim Jump As TJump
With Jump
.Push = &H68
.Address = FakeProcedureAddress
.Ret = &HC3
End With
Запись прыжка проходит нормально, т.е. WriteProcessMemory выполняется без ошибок.
Но после вызова API-функции управление моей процедуре не передается, т.е. API-функция как и положено выполняет свои действия.
На ум приходят следующие мысли:
- "Кривой" прыжок;
- Прыжок записывается не в начало API-функции, т.е. возможно я не учитываю каких-то особенностей адресации.
Подскажите, пожалуйста, что я упустил при реализации перехвата?