Как использовать DetourAttach () для указателя на функцию в шестнадцатеричном формате?

Я пытаюсь сделать учебник, используя обходной библиотеки.

В более старой версии обходной библиотеки v1.5 функция DetourFunction использовалась для определения адреса, чтобы библиотека DLL знала, где искать функцию.

Например, его можно использовать следующим образом:

         InsertDateTime = (int (__stdcall*)(int))DetourFunction((PBYTE)0x01006F10,       (PBYTE)MyInsertDateTime)

увидеть http://www.moddb.com/groups/ibepex/tutorials/function-hooking

Однако в более новых версиях функция изменена на

     LONG DetourAttach(
PVOID * ppPointer,
PVOID pDetour
);

где ppPointer — указатель на целевой указатель, к которому будет присоединен обходной путь.

Теперь, когда я знаю адрес целевой функции в шестнадцатеричном формате, 0x01006F10, я хочу как-то использовать это в качестве аргумента для ppPointer. Я пытался просто написать:

               InsertDateTime = (int (__stdcall*)(int))DetourAttach((PVOID*)0x01006F10, MyInsertDateTime);

и он компилируется нормально, но моя программа не работает, как я думал. Кажется, что программа никогда не ловит функцию с этого адреса.

Итак, в основном мой вопрос: правильно ли я использовал указатель на шестнадцатеричный адрес, и, во-вторых, у меня есть некоторые фундаментальные ошибки в том, как я использую DetourAttach ()?

0

Решение

Ты используешь DetourAttach неправильно. Правильное использование в вашем случае будет:

int(__stdcall* InsertDateTime)(int) = (int(__stdcall*)(int))(0x01006F10);

LONG errorCode = DetourAttach((PVOID*)(&InsertDateTime), (PVOID)MyInsertDateTime);
if(!errorCode) {
//Detour successful
}

Обратите внимание, что при наличии таких технологий, как ASLR; Вы должны использовать что-то вроде GetProcAddress чтобы получить адрес функции во время выполнения, в противном случае вы можете вызвать повреждение или сбой.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]