ldrFile支持(PE ELF EX STUFF等各种格式支持)

\src\VBox\Runtime\common\ldr\ldrFile.cpp

装载

 RTLdrOpen(const char *pszFilename, uint32_t fFlags, RTLDRARCH enmArch, PRTLDRMOD phLdrMod)

A)创建

   PRTLDRREADER pReader;
    int rc = rtldrFileCreate(&pReader, pszFilename);

B)

  rc = rtldrOpenWithReader(pReader, fFlags, enmArch, phLdrMod);

PE格式文件

\src\VBox\Runtime\common\ldr\ldrPE.cpp

 

文件IO

为装载模块,先通过file io将模块打开.

\src\VBox\Runtime\r3\win\fileio-win.cpp

\src\VBox\Runtime\r3\win\fileaio-win.cpp

 一个阻塞,一个异步

A) 打开文件

 size_t cchFilename = strlen(pszFilename);
    int rc = VERR_NO_MEMORY;
    PRTLDRREADERFILE pFileReader = (PRTLDRREADERFILE)RTMemAlloc(sizeof(*pFileReader) + cchFilename);
    if (pFileReader)
    {
        memcpy(pFileReader->szFilename, pszFilename, cchFilename + 1);
        rc = RTFileOpen(&pFileReader->File, pszFilename, RTFILE_O_READ | RTFILE_O_OPEN | RTFILE_O_DENY_WRITE);

      ....

B) 文件大小

 rc = RTFileGetSize(pFileReader->File, (uint64_t *)&pFileReader->cbFile);

 

C) 设置pFileReader

         pFileReader->Core.pfnRead    = rtldrFileRead;
                pFileReader->Core.pfnTell    = rtldrFileTell;
                pFileReader->Core.pfnSize    = rtldrFileSize;
                pFileReader->Core.pfnLogName = rtldrFileLogName;
                pFileReader->Core.pfnMap     = rtldrFileMap;
                pFileReader->Core.pfnUnmap   = rtldrFileUnmap;
                pFileReader->Core.pfnDestroy = rtldrFileDestroy;
                pFileReader->off       = 0;
                pFileReader->cMappings = 0;
                pFileReader->pvMapping = NULL;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值