RevsInterstellar 2025-06-10 07:34 采纳率: 0%
浏览 23
已结题

让指定内存地址不被占用,可以申请,比如0x400000

我的目的是在程序A(自己编程的基于对话框的MFC程序,用户态)中调用程序B中的函数,目前我想到比较省事的方法是,让指定内存地址(比如0x400000)不被占用,可以申请,然后将B加载至此处,程序A运行在高空地址,在网上搜索了大量的帖子,在https://bbs.kanxue.com/thread-248962.htm中有人解决了,通过先占住地址,但不知道具体如何实现的,请各位朋友帮忙看一下

如真的可以解决可私信付费

  • 写回答

6条回答 默认 最新

  • 阿里嘎多学长 2025-06-10 07:34
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解决方案

    你想要在程序A中调用程序B中的函数,而程序B需要在指定的内存地址(0x400000)中运行。为了实现这个目标,你可以使用以下方法:

    1. 使用VirtualAlloc函数来分配指定的内存地址。例如:
    HANDLE hMem = VirtualAlloc(NULL, 0x1000, MEM_COMMIT, PAGE_READWRITE);
    

    这将分配1KB的内存空间,并将其映射到0x400000地址。

    1. 使用LoadLibrary函数来加载程序B。例如:
    HMODULE hModule = LoadLibrary("path/to/programB.dll");
    

    这将加载程序B的DLL文件。

    1. 使用GetProcAddress函数来获取程序B中的函数指针。例如:
    FARPROC pFunc = GetProcAddress(hModule, "functionName");
    

    这将获取程序B中的functionName函数的指针。

    1. 在程序A中调用程序B中的函数。例如:
    pFunc();
    

    这将调用程序B中的functionName函数。

    需要注意的是,这种方法可能会受到操作系统的限制和安全策略的影响。例如,某些操作系统可能会阻止程序A访问指定的内存地址。

    安全考虑

    在使用这种方法时,需要考虑以下安全问题:

    • 程序A是否有足够的权限来访问指定的内存地址?
    • 程序B是否会泄露敏感信息?
    • 程序A是否会受到程序B的攻击?

    因此,在使用这种方法时,需要进行充分的安全评估和测试。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月14日
  • 修改了问题 6月14日
  • 修改了问题 6月10日
  • 创建了问题 6月10日