1. fmemopen(Linux POSIX 标准)

  • 功能:将内存缓冲区伪装成文件流(FILE*),支持标准文件 I/O 操作(如 fprintf、fscanf)
  • 核心机制
    • 参数:buf(预分配内存指针)、size(缓冲区大小)、mode(读写模式,如 “r+")。
    • 若 buf=NULL,则自动分配动态内存(需手动释放)。
  • 应用场景
    • 避免磁盘 I/O:处理内存中的数据(如解析网络报文)。
    • 兼容文件 API:第三方库仅支持 FILE* 参数时,将内存数据转为文件流。
  • 代码示例
1
2
3
4
5
```c
char buffer[64];
FILE *stream = fmemopen(buffer, sizeof(buffer), "w+");
fprintf(stream, "Hello, world!");
fclose(stream);  // 关闭时自动添加终止符(若空间允许)

2. MemoryModule(Windows 第三方库)

  • 功能:直接从内存加载 DLL(无需落盘),返回模块句柄供调用。
  • 核心机制
    • 解析内存中的 PE 文件格式,模拟系统加载器行为(重定位、导入表修复)。
    • 支持通过 MemoryGetProcAddress 获取函数指针。
  • 应用场景
    • 加密 DLL 运行时解密:避免恶意软件扫描磁盘文件。
    • 网络分发插件:远程下载 DLL 后直接内存加载。

对比与限制

特性fmemopen (Linux)MemoryModule (Windows)
标准性POSIX 标准(非全平台支持)第三方库(非系统原生)
内存管理需预分配缓冲区或动态分配自动处理内存分配与重定位
安全性缓冲区溢出风险需自行校验内存来源合法性