我的目的是在程序A(自己编程的基于对话框的MFC程序,用户态)中调用程序B中的函数,目前我想到比较省事的方法是,让指定内存地址(比如0x400000)不被占用,可以申请,然后将B加载至此处,程序A运行在高空地址,在网上搜索了大量的帖子,在https://bbs.kanxue.com/thread-248962.htm中有人解决了,通过先占住地址,但不知道具体如何实现的,请各位朋友帮忙看一下
如真的可以解决可私信付费
我的目的是在程序A(自己编程的基于对话框的MFC程序,用户态)中调用程序B中的函数,目前我想到比较省事的方法是,让指定内存地址(比如0x400000)不被占用,可以申请,然后将B加载至此处,程序A运行在高空地址,在网上搜索了大量的帖子,在https://bbs.kanxue.com/thread-248962.htm中有人解决了,通过先占住地址,但不知道具体如何实现的,请各位朋友帮忙看一下
如真的可以解决可私信付费
阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
你想要在程序A中调用程序B中的函数,而程序B需要在指定的内存地址(0x400000)中运行。为了实现这个目标,你可以使用以下方法:
VirtualAlloc函数来分配指定的内存地址。例如:HANDLE hMem = VirtualAlloc(NULL, 0x1000, MEM_COMMIT, PAGE_READWRITE);
这将分配1KB的内存空间,并将其映射到0x400000地址。
LoadLibrary函数来加载程序B。例如:HMODULE hModule = LoadLibrary("path/to/programB.dll");
这将加载程序B的DLL文件。
GetProcAddress函数来获取程序B中的函数指针。例如:FARPROC pFunc = GetProcAddress(hModule, "functionName");
这将获取程序B中的functionName函数的指针。
pFunc();
这将调用程序B中的functionName函数。
需要注意的是,这种方法可能会受到操作系统的限制和安全策略的影响。例如,某些操作系统可能会阻止程序A访问指定的内存地址。
在使用这种方法时,需要考虑以下安全问题:
因此,在使用这种方法时,需要进行充分的安全评估和测试。