C++ 从C/C+;中的内存加载64位DLL+;(Win64)
请告知我如何从C/C++中的内存加载64位DLL, 我正在运行Windows 64位模式,我发现很少有解决方案 Win32,但没有一个可以正确使用64位 我不想创建任何临时文件,我想 将所有req DLL放入单个.bin文件并延迟加载DLL 进入我的.exe程序 最欢迎链接和示例源代码C++ 从C/C+;中的内存加载64位DLL+;(Win64),c++,dll,win64,C++,Dll,Win64,请告知我如何从C/C++中的内存加载64位DLL, 我正在运行Windows 64位模式,我发现很少有解决方案 Win32,但没有一个可以正确使用64位 我不想创建任何临时文件,我想 将所有req DLL放入单个.bin文件并延迟加载DLL 进入我的.exe程序 最欢迎链接和示例源代码 谢谢您可以在运行时在内存中加载和执行代码,而无需临时文件。严格来说,它不是DLL,只是动态代码 您将需要在运行时生成代码的程序所使用的相同API函数(现在许多语言都有即时编译器) 原则上,只有三个步骤: 将机器
谢谢您可以在运行时在内存中加载和执行代码,而无需临时文件。严格来说,它不是DLL,只是动态代码 您将需要在运行时生成代码的程序所使用的相同API函数(现在许多语言都有即时编译器) 原则上,只有三个步骤:
- 将机器代码放入动态分配的内存中。无论是从文件中读取、通过网络传输还是使用编译器生成,都无关紧要
- 将包含代码的页面标记为可执行。在Windows上,这是通过
完成的。在Linux上,VirtualProtect
mprotect
- 同步指令和数据缓存(现代CPU是哈佛和冯·诺依曼体系结构的混合体)。在Windows上,这是
FlushInstructionCache
不过,这远不是一个无法克服的问题。在进行修复和导入之前,先让一个独立于位置的函数开始工作。你不能简单地将这些要“从内存加载”的库静态链接到你的.exe吗?据我所知,从内存加载DLL实际上是不可能的。至少不使用Windows API。当然,您可以编写自己的PE加载程序,但这将是相当多的工作…不幸的是,我有一些dll没有静态版本可用(如fmodex.dll),您是对的,我已经为艰苦的工作做好了准备…谷歌快速显示这里有一个额外的链接(来自同一作者):这一个解释了过程。