只是为了提高我的知识。我想从我的程序(称为My program)调用位于程序(称为Target)中的函数。
我的步骤:
我想知道在其他程序中调用函数就像我做的那样是不可能的?如果不可能,我错了什么?
这里有几行代码:
我的节目:
TargetThreadId = GetWindowThreadProcessId(hTargetWindow, &TargetProcessId);
hLib = LoadLibraryA(DLL_FILE);
pfSetHook = (pfSetHookType)GetProcAddress(hLib, "SetHook");
pfSetHook(hLib, TargetThreadId);
我的Dll:
#define SHOWADDR 0x00401472
SetHook(HINSTANCE hLib, DWORD dwTargetThreadId)
{
ghHook = SetWindowsHookEx(WH_CBT, (HOOKPROC)HookProc, hLib, dwTargetThreadId);
}
Caller()
{
pfShowType pfShow = (pfShowType)SHOWADDR; // points to fixed address which was defined
pfShow(); // calling
}
目标计划:
// The function's address is 0x00401472
Show()
{
MessageBoxA(NULL, "Yeah, I'm a function in Target :)!", "Show Function", 0);
}
这是目标程序的反汇编代码
...
00401472 PUSH EBP
00401473 MOV EBP,ESP
00401475 SUB ESP,18
00401478 MOV DWORD PTR SS:[ESP+C],0
00401480 MOV DWORD PTR SS:[ESP+8],Target.0040300>
00401488 MOV DWORD PTR SS:[ESP+4],Target.0040301>
00401490 MOV DWORD PTR SS:[ESP],0
00401497 CALL <JMP.&USER32.MessageBoxA>
0040149C SUB ESP,10
0040149F LEAVE
004014A0 RETN
...