Dependencies 源码解析①:PE 文件内存映射全景图——Process Hacker phlib 到底做了什么

发布时间:2026/11/10 3:25:54

Dependencies 源码解析①:PE 文件内存映射全景图——Process Hacker phlib 到底做了什么 Dependencies 源码解析①PE 文件内存映射全景图——Process Hacker phlib 到底做了什么【免费下载链接】DependenciesA rewrite of the old legacy software depends.exe in C# for Windows devs to troubleshoot dll load dependencies issues.项目地址: https://gitcode.com/gh_mirrors/de/DependenciesDependencies是一个用 C# 重写的经典 Windows 开发工具旧版 depends.exe帮助开发者快速排查PE 文件.exe / .dll的DLL 依赖加载问题——比如缺少某个 DLL、位数不匹配这类让新手抓狂的报错。它的解析引擎并非从零手搓而是深度集成了 Process Hacker 项目中的phlib内存映射库。本文带你走一遍 PE 文件从磁盘到内存的完整链路看懂 phlib 到底做了什么。一、先建立全景图一次 PE 解析的调用链当你把一个 exe 拖进 Dependencies 时数据是这样流动的C# 业务层 (DependenciesLib/FindPeModule.cs) │ 调用 PE 类的 Load() ▼ C/CLI 桥接层 (ClrPhlib/src/managed/PE.cpp) │ 把托管字符串转成原生宽字符串 ▼ UnmanagedPE 封装 (ClrPhlib/src/unmanaged/UnmanagedPE.cpp) │ 持有 PH_MAPPED_IMAGE 结构体 ▼ Process Hacker phlib (third_party/phlib/mapimg.c) │ NtCreateSection NtMapViewOfSection ▼ Windows 内存映射视图 —— PE 内容以指针偏移方式被读取理解这条链的关键是phlib 把整个 PE 文件一次性映射进进程地址空间之后所有解析都只是在内存视图里按偏移取数据不再碰磁盘。这就是它又快又稳的根本原因。二、PE 文件如何进入内存内存映射技术1. 打开文件并创建内核 Section 对象入口函数在 mapimg.c 的PhLoadMappedImage它先调用PhMapViewOfEntireFile完成三件事以只读方式打开目标文件允许其他进程同时读取调用NtCreateSection基于文件创建 Section 对象调用NtMapViewOfSection把整个文件映射到当前进程地址空间得到一个viewBase指针。相关实现可精读 mapimg.c。这里有两个值得注意的细节权限按需申请只读解析只申请FILE_READ_ATTRIBUTES | FILE_READ_DATA不会锁死文件卸载同样直接PhUnloadMappedImage只是一句NtUnmapViewOfSection立即释放内存并解除对文件的占用见 mapimg.c。2. PhInitializeMappedImage逐层体检 PE 结构拿到内存视图后PhInitializeMappedImage 开始校验文件是否真的是一个合法 PE校验步骤做什么失败返回值DOS 头魔数检查文件头是否为MZSTATUS_INVALID_IMAGE_NOT_MZe_lfanew 偏移必须非 0 且小于文件大小STATUS_INVALID_IMAGE_FORMATPE 签名检查PE\0\0签名STATUS_INVALID_IMAGE_FORMATOptional Header 魔数必须是 32 位或 64 位魔数STATUS_INVALID_IMAGE_FORMAT内存探测用 SEH 异常探测指针访问越界返回异常码最后它把NtHeaders指针、节区表、可选头信息全部填进PH_MAPPED_IMAGE结构体——这个结构体就是后续所有解析的锚点。为什么用 SEH 探测而不是先判断长度因为 PE 文件可能被恶意构造或截断光看声明的长度不可信真正访问一下内存才能确认数据安全。三、映射之后phlib 提供的三大解析能力PH_MAPPED_IMAGE就绪后mapimg.h 中声明的一系列 API 就能无磁盘 I/O地读取 PE 的各个目录PhGetMappedImageImports/PhGetMappedImageDelayImports解析导入表含延迟加载导入返回按 DLL 分组的PH_MAPPED_IMAGE_IMPORTS结构——这正是 Dependencies 界面里导入的 DLL 列表的数据来源PhGetMappedImageExports解析导出表得到PH_MAPPED_IMAGE_EXPORTS支持按名称或序号查函数地址PhGetMappedImageResources枚举资源段用于提取嵌入的清单manifestPhCheckSumMappedImage计算 PE 校验和与文件头声明值比对判断二进制是否被修改过。四、ClrPhlib 桥接层C# 如何拥抱 phlibphlib 是纯 C 代码而 Dependencies 上层是 C#。两者之间的翻译官是ClrPhlib项目C/CLI核心结构分两层1. UnmanagedPE —— 原生封装层UnmanagedPh.h 中定义的UnmanagedPE类直接持有PH_MAPPED_IMAGE、导入/延迟导入/导出等原生结构体。它的 LoadPE 方法 只做了两件事确保旧映像已卸载然后调用PhLoadMappedImage加载新文件。析构时自动卸载杜绝内存泄漏。2. PE 类 —— C# 可见的托管门面PE.cpp 把上述原生能力翻译成 C# 友好的接口公开类型在 ClrPhlib.h 中声明Load()/Unload()映射与卸载并填充PeProperties机器类型、映像基址、入口点、子系统、校验和等见 InitPropertiesGetImports()/GetExports()惰性解析 本地缓存首次调用才解析之后直接返回缓存列表GetManifest()从资源段提取 UTF-8 嵌入清单供 SxS侧载分析使用IsWow64Dll()/GetProcessor()判断 32 位/64 位、x86/arm/arm64 架构——这正是32 位进程装 64 位 DLL 失败这类问题的判断依据。一个容易被忽视的细节NativeFileNativeFile.h 是System.IO.File的部分重写专门绕开 64 位系统中的WoW64 文件系统重定向32 位程序访问 System32 会被悄悄转到 SysWOW64。分析 DLL 依赖时这一点致命——它保证了 32 位 Dependencies 也能如实看到 64 位目录下的文件还顺带实现了基于 bcrypt 的 SHA256 文件哈希。五、源码导读建议按这个顺序精读顺序文件看点1third_party/phlib/mapimg.c内存映射与 PE 校验的完整实现约 1800 行2third_party/phlib/include/mapimg.hPH_MAPPED_IMAGE系列结构与全部 API 声明3ClrPhlib/src/unmanaged/UnmanagedPE.cpp最薄的原生封装理解桥接层的最佳起点4ClrPhlib/src/managed/PE.cpp托管门面缓存策略、清单提取、架构判断5DependenciesLib/FindPeModule.csC# 业务层如何组合使用 PE 类做 DLL 搜索6test/manifest-regress/清单回归测试样例含.dll.manifest实例 后续文章会基于这条链路继续深入ApiSet Schema 解析Windows 8 之后 DLL 名称如何被虚拟化与DLL 搜索顺序模拟FindPeModule 是如何复刻加载器行为的。六、小结用三句话记住本文phlib 的核心思想是先映射、后解析——一次NtCreateSection NtMapViewOfSection把 PE 文件搬进内存视图之后全是指针运算健壮性靠 SEH 探测——不信任文件自报的头部长度访问即校验畸形 PE 不会让工具崩溃分层清晰——C 层phlib做重活C/CLI 层ClrPhlib做翻译C# 层DependenciesLib做体验各层通过PH_MAPPED_IMAGE这一个结构体解耦。掌握这条 PE 内存映射全景链路你就拿到了读懂 Dependencies 整个解析引擎的地图。️【免费下载链接】DependenciesA rewrite of the old legacy software depends.exe in C# for Windows devs to troubleshoot dll load dependencies issues.项目地址: https://gitcode.com/gh_mirrors/de/Dependencies创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/4 5:53:39

FPGA实战:将UART封装为Vivado自定义IP核全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/4 14:23:09

HBase Shell 操作全解析:列族设计、Row Key 与排错指南

简介:这是一份HBase入门实验报告,面向正在学习Hadoop生态与NoSQL数据库的初学者,重点演示如何通过HBase Shell完成创建表、插入数据与查询操作。报告以student表为例,梳理了建表语句、put写入和get查询的具体命令,并记…

2026/11/10 6:21:52

Win10磁盘100%排查:任务管理器到SFC/DISM实战

任务管理器里磁盘一栏长期顶在 100%,鼠标点一下要等三秒,这种滋味我在好几台 windows10 机器上都遇到过。网上搜“磁盘100%解决方法”,答案从关服务到换硬盘五花八门,但真正到了现场,同一招在这台机器上管用&#xff0…

2026/11/10 19:15:44

鄱阳电工证报考官方回应:工地太忙根本没时间复习考试怎么办?

鄱阳电工证报考官方回应:工地太忙根本没时间复习考试怎么办? 工地太忙根本没时间复习考试,这是大多数一线电工的共同烦恼。尤其是像鄱阳这类工程项目密集的地区,一线工人经常面临工期紧、任务重的情况,根本没有多余时间准备考试。但根据…

2026/11/10 19:15:44

沭阳电工证考试培训的良心建议:别再被中介坑了

沭阳电工证考试培训的良心建议:别再被中介坑了 不知道去哪报名怕被中介坑?你不是一个人。在沭阳电工证考试培训这条路上,很多学员都踩过坑,甚至因为选择了不靠谱的培训机构,不仅浪费了时间和金钱,还耽误了正常的工作安排。其实,只要你掌握了正确的报名…

2026/11/10 19:15:44

几级资质有几个特种工良心建议

几级资质有几个特种工良心建议 之前考的证在外省能不能转过来?这几乎是每个特种作业操作证持有人都会问的问题。如果你在外地考的证,现在回到本地工作,担心证书无效或者需要重新考试,这很正常。但好消息是,根据 河南省安全技术防范行业协会…

2026/11/10 19:15:44

美保特种作业证专考试含金量高吗?怕考不过白交培训费的看过来

美保特种作业证专考试含金量高吗?怕考不过白交培训费的看过来 怕考不过白交培训费?美保特种作业证专考试含金量你得知道!现在越来越多的建筑工人、施工人员想考特种作业证,尤其是低压电工证、焊工证这些热门项目,但很多人在选择培训机构和考试内容时一头…

2026/11/10 19:15:44

电工证需要多久最新政策解读

工地太忙根本没时间复习考试?郑州报考避坑指南全解析 工地太忙根本没时间复习考试,这几乎是所有电工在报考特种作业操作证时最头疼的问题。尤其是像许昌市的市政公用工程从业者,日常工作任务繁重,根本没有多余时间去准备考试,更别说还要担心电工证需要多…

2026/11/10 19:10:42

电工证报名申请过期了怎么补办?考前押题帮你稳过复审

电工证报名申请过期了怎么补办?考前押题帮你稳过复审 证书过期了不知道怎么复审延期?你不是一个人。越来越多的电工从业者在日常工作中发现,特种作业操作证有效期为6年,每3年需要复审一次,一旦错过,就可能面临停工、罚款,甚至被追究法律责任。特别是…

2026/11/10 8:12:38

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/10 0:01:28

学历不高怕报不上名?考电工证报名费+网上查询全攻略来了

学历不高怕报不上名?考电工证报名费+网上查询全攻略来了 你是不是也担心自己学历不高,考电工证报名费太贵,根本报不上名?别急,今天就来给你讲讲,怎么用最少的钱,把证拿到手,还能在工地上多挣点钱。 电工证报名费多少钱?网上查询是关键…

2026/11/10 0:01:29

绍兴考电工证培训机构怎么选?2026河南最新政策别错过

绍兴考电工证培训机构怎么选?2026河南最新政策别错过 怕考不过白交培训费?你不是一个人。2026河南最新政策出台,对电工证考试、报名、培训、复审都有明确规定。选择绍兴考电工证培训机构,别再踩坑,下面一步步教你避坑。…

2026/11/9 6:30:27

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/10 10:29:37

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑