:이 코드는 아무런 문제가 없습니다본론 - JMP 00000000 이것은 내가 사용하고 코드입니다
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <detours.h>
#include <fstream>
#define real_sendto 0x152942C6
void(__cdecl* originalFunction)();
void tompa_sendto() {
printf("Hellooo");
return originalFunction();
}
void hook() {
originalFunction = (void(__cdecl*)())DetourFunction((PBYTE)real_sendto, (PBYTE)tompa_sendto);
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH: hook(); break;
case DLL_PROCESS_DETACH: return FALSE; break;
}
return TRUE;
}
, 그것은 후크가 0x152942C6에 배치하고 나는 그것이 (내 tompa_sendto 점프있어 볼 수 있습니다)는 그리고 다시. 내가 후크로 대신이 코드를 사용하는 경우
그것은 내가 0x152942C6에서 볼 수있는 메모리에 제대로
를 후크를 설정하지 않습니다 : JMP 내가 tompa_sendto에 배치 무엇이든간에 코드 00000000
void tompa_sendto() {
char buffer[] = {'x', 'y', 'z'};
return originalFunction();
}
() 나쁜 jmp 때문에 프로그램을 충돌, 거기에 넣어 관리했습니다 유일한 2 코드 printf 및 messageBoxA 있습니다.
아마도'DetourFunction'이 실패하고'NULL' 포인터를 반환했기 때문일 수 있습니까? –
**'tompa_sendto'가 호출되기 전에'originalFunction'가 적절히 초기화되었는지 확신합니까? –
@barakmanos 전역 변수이므로 0으로 초기화해야합니다. –