易语言资源网 - 做最全的易语言资源下载社区
精易论坛授权登录

【Ldr】关于系统Dll加载/卸载的简单实现过程和简单分析   [复制链接]

    2022-07-14 09:07:01
    模块控件源码
    易语言资源网
    2401 次浏览
    来源链接

前言:

  • 本方法直接使用了NtMapViewOfSection实现Dll的映射,本质上和系统加载Dll的方式差别不大。

实现过程:

  • 利用NtOpenFile打开Dll文件,然后使用NtCreateSection创建SectionHandle,接着使用NtMapViewOfSection将Dll映射到内存,基本的Dll加载就完成了。
  • 然后将对映射的镜像进行处理,主要处理部分是重定向表和构建导入表,并且对映射内存设置保护:
  • 下面是一些简单的测试:
  • 在ProcessHacker中可以看到这个Dll(没有尝试将这个Dll写入Ldr的链,直接枚举是枚举不到的),Etw的IMAGE加载监听仍然可以监听到这个Dll的加载行为(提示:触发Etw记录的本质原因是使用了命令NtMapViewOfSection,在内核中Etw会对NtMapViewOfSection的行为进行记录)

其他:

  • 如果将NtMapViewOfSection改为自己编写的内存映射代码,即可实现内存Dll。
  • 本例子中的LdrpMapDll实际上只是一个很简单的例子,只处理了最基础的部分,很多复杂的部分还没有处理(包括清单,老版本兼容,入口点消息等等),这就自行开发了吧。


点我下载 (已有 81 次下载)

引用模块





引用支持库


源码文件名 支持库文件名 支持库标识
MapDll.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325
测试Dll.e 系统核心支持库 5.7 d09f2340818511d396f6aaf844c7e325


[错误报告]   上一篇:PGE2D游戏引擎加强版...     下一篇:分享多线程内存搜索速度非常快...