Ich versuche, MS-Umleitungen zu verwenden, und ich weiß nicht, ob ich etwas falsch mache; Ich kann keine Antwort auf mein Problem finden.Warum stürzt der Prozess ab, wenn versucht wird, einen Winapi umzuleiten?
Ich habe versucht, mehrere Funktionen in einem Prozess mit meiner injizierten DLL zu umgehen, aber jeder Versuch führt zum Absturz des Prozesses.
Eine der Funktionen, ich versuche ist winapi DirectDrawCreate zu einzuhaken:
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach((PVOID *)DirectDrawCreate, hkDirectDrawCreate);
DetourTransactionCommit();
hkDirectDrawCreate definiert ist als:
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);
}
Auf den Aufruf der Prozess abstürzt DetourAttach; der Stack-Trace ist:
Der Code bricht in 'detour_skip_jmp' at '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 ist NULL, und pbCode gibt die Fehlermeldung 'Fehler beim Lesen der Zeichen der Zeichenfolge'
Zurück zu DetourCodeFromPointer ppGlobals ist auch NULL dort, aber ich denke, es soll sein; hier ist der Anruf:
pDetour = DetourCodeFromPointer(pDetour, NULL);