我想在程序中调用一个函数。我从 DLL 入口点执行此操作。我在 IDA 中打开了该程序及其 .pdb 文件。根据 IDA,这是该函数的样子:
void __fastcall Logger::log(LogLevel lvl, const char *msg)
(LogLevel 只是一个枚举)
参数一目了然,不是问题。
但问题是我可能有错误的地址(我假设我需要先获取类的地址?)IDA 给了我:
.text:00000001400981A0
为函数。这是我尝试过的:
BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved) {
if (dwReason == DLL_PROCESS_ATTACH) {
typedef void __fastcall func(int lvl, const char* msg);
func* loggerLog = (func*)(GetModuleHandle(0) + 0x1400981A0);
loggerLog(0, "test 123");
}
return 1;
}
这样做程序就关闭了,没有错误。
我不知道从哪里开始。正确的方法和地址是什么?我如何获得我需要的地址?