Я пытаюсь использовать обходные узлы MS, и я не знаю, делаю ли я что-то неправильно; Кажется, я не могу найти ответ на свой вопрос.Почему процесс рушится при попытке объединить winapi?
Я попытался объединить несколько функций в процессе, используя мою вложенную DLL, но каждая попытка заставляет процесс сбой.
Одна из функций я пытаюсь подключить это WinAPI DirectDrawCreate:
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach((PVOID *)DirectDrawCreate, hkDirectDrawCreate);
DetourTransactionCommit();
hkDirectDrawCreate определяется как:
HRESULT __stdcall hkDirectDrawCreate(GUID *p1, LPDIRECTDRAW *p2, IUnknown *p3)
{
if(!pDDC)
return 0x00;
printf("A call to hkDirectDrawCreate was made\n");
return DirectDrawCreate(p1, p2, p3);
}
На призыв DetourAttach сбои процесса; стек трассировки:
Кодекса перерывы в 'detour_skip_jmp' в '0x68B028BD':
// First, skip over the import vector if there is one.
if (pbCode[0] == 0xff && pbCode[1] == 0x25) { // jmp [imm32]
68B028B2 mov ecx,1
68B028B7 imul edx,ecx,0
68B028BA mov eax,dword ptr [pbCode]
68B028BD movzx ecx,byte ptr [eax+edx]
68B028C1 cmp ecx,0FFh
68B028C7 jne detour_skip_jmp+82h (68B02912h)
68B028C9 mov edx,1
68B028CE shl edx,0
68B028D1 mov eax,dword ptr [pbCode]
68B028D4 movzx ecx,byte ptr [eax+edx]
68B028D8 cmp ecx,25h
68B028DB jne detour_skip_jmp+82h (68B02912h)
Edit: ppGlobals является NULL, и pbCode выдает ошибку 'Ошибка чтения символов из строки'
Возвращаясь к DetourCodeFromPointer, ppGlobals также является NULL, но я предполагаю, что это должно быть; здесь находится звонок:
pDetour = DetourCodeFromPointer(pDetour, NULL);