У меня есть приложение (сделанное мной), и теперь я решил, что хочу попробовать перехват.
Итак, функция, которую я пытаюсь перехватить, выглядит так:
void PrintMessage(const char* c_szFormat, ...)
{
char szBuf[1024 + 2];
strncpy_s(szBuf, "I got: ", 1024);
int len = strlen(szBuf);
va_list args;
va_start(args, c_szFormat);
len = _vsnprintf(szBuf + len, sizeof(szBuf) - (len + 1), c_szFormat, args) + len;
va_end(args);
szBuf[len] = '\n';
szBuf[len + 1] = '\0';
fprintf(stderr, "%s", szBuf);
}
Я успешно нашел функцию на ida pro, она выглядит следующим образом: http://prntscr.com/s6esam
Может кто-нибудь объяснить мне, почему она показывает функцию как целое число вместо void? Я понимаю, что const char * показывается как указатель int a1 в моем случае.
Также я пытался перехватить его по адресу 0x512550
Это мой код
#include <windows.h>
#include "pch.h"
#include <iostream>
#include "detours.h"
int(* originalCall)(const char*, ...);
int hookedFunction(const char* a1, ...)
{
MessageBoxA(NULL, "", "Function called", MB_OK);
return originalCall("Hooked %s", "test");
}
BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
MessageBoxA(NULL, "", "Hook set", MB_OK);
originalCall = (int(*)(const char*, ...))DetourFunction((PBYTE)0x512550, (PBYTE)hookedFunction);
break;
}
return TRUE;
}
Но мне не повезло, что это не работает, может кто-нибудь сказать мне несколько советов или подсказок о том, как мне продолжить?