从C/C++(Win64)中的内存加载64位DLL
loading 64-bit DLLs from memory in C/C++ (Win64)
请告诉我如何在C/C++中从内存加载64位DLL,我正在运行Windows 64位模式,我发现了一些解决方案Win32,但没有与64位一起正常工作
我不想创建任何临时文件,我想将所有req DLL转换为单个.bin文件和延迟加载DLL进入我的.exe程序
欢迎链接和示例来源!
感谢
您可以在运行时在内存中加载和执行代码,而不需要临时文件。严格来说,它不是DLL,只是动态代码。
您将需要在运行时生成代码的程序所使用的相同API函数(目前许多语言都有实时编译器(。
原则上,只有三个步骤:
- 将机器代码放入动态分配的内存中。无论你是从文件中读取它,还是通过网络传输它,或者使用编译器生成它,都无关紧要
- 将包含代码的页面标记为可执行。在Windows上,这是通过
VirtualProtect
完成的。在Linux上,mprotect
- 同步指令和数据缓存(现代CPU是Harvard和von Neumann架构的混合体(。在Windows上,这是
FlushInstructionCache
后两个项目符号需要包含代码的缓冲区的基地址和大小。
更困难的是处理具有依赖关系的代码。由于您没有使用操作系统加载程序,因此没有静态导入解析,也没有修复程序。如果您的代码是为这种情况而设计的(接受指向主机应用程序数据的指针作为函数参数,并为所有外部交互进行处理(,那么这不一定是个问题。既然你是从DLL的角度考虑的,那么它很可能是。
尽管如此,这远不是一个无法克服的问题。在进行修正和导入之前,先让一个与位置无关的函数工作。
相关文章:
- 原子加载和存储与内存顺序放宽
- 如何从内存缓冲区加载张量流图
- 我在 IDA 或 dbg 或 olly 上看到的内存是否与我在 RAM 上实时加载的内存相同?
- 从C/C++(Win64)中的内存加载64位DLL
- 对外部函数的调用是否强制从内存加载
- 将使用 4 或 8 个对齐规则将加载处理到内存中
- C++:类如何将自身加载到内存中以递增全局变量?
- 加载字节数组(从内存)到libpng c
- 将内存保存到文件并加载它而不必解析数据?
- 加载时间,遍历时间,不同数据段C/C 的内存使用率
- 急切地加载整个模型以估计张量流的内存消耗
- 从内存加载动态库
- 为什么编译器在循环中从内存加载此指针
- SFML无法从内存加载图像,未提供任何数据
- 在启动时从内存加载QImages
- 在非托管程序中托管CLR时从内存加载程序集
- CImage::在不使用CreateStreamOnHGlobal的情况下从内存加载()
- 当从内存加载PNG时,Libpng错误无效的块类型
- gdkpixbuf从内存加载图像
- 从内存加载CA证书