深入剖析Win32PE结构文件格式

【菜科解读】
很久以前,我开始为Microsoft Systems Journal(现在的MSDN(R) Magazine)写文章,其中 有一篇名为“探索PE文件内幕——Win32可移植可执行文件格式之旅”的文章很受欢迎,大大超 出了我的意料。
直到现在,我还听说有人(甚至在Microsoft)仍然在使用那篇文章,它依旧被 收录在MSDN Library中。
不幸的是,文章的最大问题是它们是静止的。
但是Win32(R)的世界在这些 年已经发生了很大的变化,因此那篇文章已经严重过时了。
我要从本月开始用两部分系列的文章 来补救这种情况。
你可能想知道为什么要关注可执行文件的格式。
答案永远是:操作系统的可执行文件格式和 数据结构展现了操作系统内部许多信息。
通过理解 EXE和 DLL 的内部情况,你会发现你已经变成 你周围一个更优秀的程序员。
当然,通过阅读 Microsoft的 PECOFF 规范你可以获得许多我将要告诉你的内容。
但是与大 多数规范一样,它更注重完整性而不是可读性。
在本文中,我把精力集中于解释整个故事中最重 要的部分,同时填补那些并不适合出现在官方规范中的怎么样(How)以及为什么(Why)的问题。
另外,在本文中我还会讲到一些非常有用的内容,它们并未出现在任何 Microsoft官方文档中。
让我先举一些例子来说明自从1994年我写那篇文章以来有关可执行文件方面都发生了哪些 变化。
由于16位 Windows(R)已经成为历史,因此没有必要再与Win16的 NE(New Executable)格 式相比较了。
另一个已经脱离人们视野的是 Win32s(R)。
在 Windows 3.1 上运行Win32 程序非常不 稳定是最令人讨厌的事。
回到当时,Windows 95(当时代号为“Chicago”)甚至还未发行。
Windows NT(R)还是3.5 版。
Microsoft 链接器还未进行非常有效地优化。
值得一提的是当时已经在MIPS和 DEC Alpha 上实现了 Windows NT。
自从那篇文章以来都出现了什么新内容呢?64位Windows引进了它自己的变种的PE文件格 式。
Windows CE 添加了许多的新型处理器。
诸如 DLL延迟加载、节合并以及绑定之类的优化已 经铺天盖地。
有许多新东西要加入到这个故事中。
让我们不要忘了 Microsoft(R) .NET。
该把它放在什么位置呢?对于操作系统来说,.NET 可 执行文件只不过是普通的Win32 可执行文件。
但是.NET 运行时能够识别出这些可执行文件中的 数据并把它作为元数据(metadata)和中间语言(Intermediate Language,IL),它们对.NET 来说非常重要。
在本文中,我要敲开.NET 元数据结构的大门,但把对它全部光彩的彻底挖掘留 给下一篇文章。
如果Win32 世界中的所有这些加加减减还不足以成为我重新写那篇文章的理由的话,那么 我只有列出原来那篇文章中的一些令我害怕的错误了。
例如我对线程局部存储(TLS)支持情况 的描述是错误的。
同样,通篇我对日期/时间戳这个DWORD 的描述仅在太平洋时区才是精确的! 另外,有许多内容在当时是正确的,但现在已经不正确了。
我说过.rdata 节并没有太大的 作用。
今天,诚然是这样。
我也说过.idata 节是可读/可写的节,但现在却有许多试图拦截 API 的人发现它在很多情况下都是不正确的。
伴随着在这篇文章中完全更新 PE文件格式的故事,我也对用于显示 PE文件内容的PEDUMP 程序进行了彻底修改。
PEDUMP 现在可以在 x86和 IA-64 平台上编译和运行,并且能够转储32 位 和 64位PE 文件。
最重要的是,PEDUMP的源代码可以从本文开头的链接处下载。
这样,你就有 了一个用这里讲的概念和数据结构实际工作的例子。
PE 文件格式概览 Microsoft引进了PE 文件格式,更经常被称为PE 格式,作为最初的 Win32规范的一部分。
然而PE 文件源自VAX/VMS上早期的通用目标文件格式(Common Object File Format,COFF)。
这是由于许多最初的Windows NT 开发团队的成员都来自数字设备公司(Digital Equipment Corporation,DEC)。
这些开发者很自然就使用现有的代码以便快速开始新的Windows NT 平台。
之所以选择术语“可移植可执行”是打算要在所有支持的 CPU 上的所有版本的 Windows 上 使用相同的可执行文件格式。
从大的方面来说,这个目标已经实现,因为Windows NT及其后继 操作系统、Windows 95 及其后继操作系统以及Windows CE 都使用相同的可执行文件格式。
Microsoft编译器生成的OBJ 文件也使用 COFF 格式。
从COFF 格式的一些域使用的竟然是 八进制编码你就能知道它是多么老。
COFF格式的OBJ 文件中有许多数据结构和枚举类型与PE 文 件相同,后面我会提到。
64 位Windows 需要做的只是修改PE 格式的少数几个域。
这种新的格式被称为PE32+。
它并 没有增加任何新域,仅从PE 格式中删除了一个域。
其余的改变就是简单地把某些域从32 位扩展 到 64位。
在大部分情况下,你都能写出同时适用于32 位和64 位PE 文件的代码。
Windows 头文 件有这种魔力可以使这些区别对于大多数基于C++的代码都不可见。
EXE文件与 DLL 文件的区别完全是语义上的。
它们使用的是相同的PE 格式。
惟一的不同在 于一个位,这个位用来指示文件应该作为 EXE 还是DLL。
甚至DLL文件的扩展名也完全也是人为 的。
你可以给 DLL 一个完全不同的扩展名,例如.OCX 控件和控制面板小程序(.CPL)都是DLL。
PE 文件一个非常好的地方就是它的数据结构在磁盘上与在内存中一样。
加载一个可执行文 件到内存(例如通过调用LoadLibrary函数)主要就是把PE 文件中的某个部分映射到地址空间 中。
因此像IMAGE_NT_HEADERS(后面我会讲到)这样的数据结构在磁盘上和在内存中是一样的。
如果你知道如何在一个 PE文件中找到某些内容,你几乎可以确定当文件被加载进内存时可以找 到同样的信息。
注意到PE 文件并不是作为单一的内存映射文件被映射进内存的这一点非常重要。
相反, Windows 加载器查看PE 文件并确定文件中的哪些部分需要被映射。
当映射进内存时,文件中的 高偏移相对于内存中的高地址。
某项内容在磁盘文件中的偏移可能与它被加载进内存之后的偏移 不同,但是将磁盘文件中的偏移转换成内存偏移需要的所有信息都存在
深入探索深度技术:理解背后的原理与实际应用
随着计算能力和数据获取的增多,深度学习、人工智能以及物联网等新技术被越来越多地应用于提升产品质量和用户体验的领域。
本文将通过深入分析这些技术的原理与实际应用,揭示它们在改善硬件产品质量、优化系统使用以及故障解决方面的潜力。
工具原料:系统版本:Windows 11, iOS 17品牌型号:Dell XPS 13 (2023), iPhone 14 Pro软件版本:TensorFlow 2.11, PyTorch 1.10一、深度学习的原理与应用深度学习作为人工智能的重要分支,其基础是模拟人脑神经网络的多层结构,通过海量数据训练模型以实现自动化决策和预测。
深度学习的强大之处在于其能处理原始数据并自动进行特征提取。
例如,在图像识别中,深度学习可分析图像的像素级信息并识别特定模式,大幅提升识别准确度。
在实际应用中,深度学习已被广泛用于智能手机的摄影系统。
以iPhone 14 Pro为例,其借助深度学习算法能够实现实时图像增强,如夜间模式和人像光效。
这不仅提升了用户拍照的体验,也提高了硬件的竞争力。
二、人工智能提高系统使用效率人工智能技术的进步让操作系统更智能、更高效。
Windows 11通过引入AI助手和改进的任务管理,使用户能够更快速地完成工作。
例如,自动化助手可以根据用户习惯推荐应用程序或展示日程安排,从而优化时间管理效率。
在智能手机平台上,AI则通过学习用户的使用模式来优化电池使用性能。
例如,基于AI的智能电池管理系统可以预测并供给能量,减少不必要的电池消耗,延长设备的续航能力。
三、物联网助力故障诊断物联网技术通过连接设备与网络,使得硬件故障诊断变得更加高效。
借助传感器和实时数据采集,系统能及时发现并修复潜在问题。
例如,在智能家居系统中,采集到的温度数据可用于检测供暖设备的异常,从而避免故障的发生。
在车联网中也同样如此,许多制造商已开始利用物联网技术进行车辆的远程监控与故障诊断。
实时数据传输能够让系统自动分析车辆状态并提出维护建议,为用户节省了大量的时间与费用。
拓展知识:大数据的作用在深度技术中的价值同样不可忽视。
无论是深度学习、AI还是物联网,它们的有效运行都依赖于大量的数据。
数据不仅决定了模型的训练效果,也影响到整个系统的响应速度与稳定性。
在未来,随着数据分析与处理技术的进步,我们可以期待更为精准和个性化的智能解决方案。
对于企业而言,实施这些深度技术不仅要求技术的积累,也需要策略上的变革。
企业应积极探索数据驱动的运营模式,以应对市场快速变化的需求。
GPRS是什么意思?深入解析其技术原理及在移动通信中的应用价值与用户需求
它使得用户能够在移动设备上实现数据的快速传输,支持多种应用场景,如互联网浏览、电子邮件和即时消息等。
本文将深入解析GPRS的技术原理、应用价值以及用户需求,帮助读者更好地理解这一重要的移动通信技术。
工具原料:系统版本:Android 12、iOS 15品牌型号:Samsung Galaxy S21、Apple iPhone 13软件版本:Chrome 96、Safari 15一、GPRS的技术原理GPRS是一种分组交换技术,允许用户在移动网络中以数据包的形式发送和接收信息。
与传统的电路交换技术相比,GPRS能够更高效地利用网络资源。
其基本原理是将数据分成小块(数据包),通过无线信道进行传输,接收方再将这些数据包重新组合成完整的信息。
在GPRS网络中,用户通过移动台(如手机)与基站进行通信,基站再将数据传输到GPRS核心网络。
核心网络包括多个重要组件,如GGSN(网关GPRS支持节点)和SGSN(服务GPRS支持节点),它们负责数据的路由和管理。
GPRS的最大传输速率可达到171.2 kbps,虽然相较于后来的3G和4G技术有所不足,但在其推出时,已经大幅提升了移动数据服务的能力。
二、GPRS在移动通信中的应用价值GPRS的出现极大地推动了移动互联网的发展。
它为用户提供了多种数据服务,包括但不限于网页浏览、电子邮件、即时消息和多媒体信息服务(MMS)。
例如,用户可以在Samsung Galaxy S21上使用GPRS进行网页浏览,快速访问社交媒体平台,或在Apple iPhone 13上接收和发送电子邮件。
此外,GPRS还为物联网(IoT)设备的连接提供了基础。
许多智能设备,如智能家居系统和车载导航,依赖于GPRS进行数据传输。
通过GPRS,这些设备能够实时发送数据到云端,用户可以通过手机应用进行远程监控和控制。
三、用户需求与GPRS的未来发展随着用户对移动数据服务需求的不断增加,GPRS虽然在技术上逐渐被更先进的3G、4G和5G技术所取代,但其在某些特定场景下仍然具有重要价值。
例如,在偏远地区或网络覆盖不全的地方,GPRS仍然是一个可行的选择。
此外,GPRS的低功耗特性使其在一些物联网应用中仍然具有竞争力。
未来,随着5G技术的普及,GPRS可能会逐渐被淘汰,但在某些特定的应用场景中,它仍然会发挥作用。
用户在选择设备和服务时,仍需关注网络的覆盖情况和数据传输需求,以便选择最合适的技术。
拓展知识:除了GPRS,移动通信技术的发展历程还包括多个重要阶段。
GSM是GPRS的基础,提供了语音通话和短信服务。
随后,3G技术的引入使得数据传输速率大幅提升,用户能够享受更流畅的网络体验。
4G LTE技术的出现则进一步推动了高清视频、在线游戏等高带宽应用的发展。
在物联网领域,除了GPRS,NB-IoT(窄带物联网)和LoRa(长距离无线电)等新兴技术也在不断发展。
它们在低功耗、广覆盖和大连接数方面具有优势,适用于智能城市、智能农业等场景。
总结:GPRS作为一种重要的移动通信技术,虽然在技术上逐渐被更先进的网络所取代,但其在特定场景下仍然具有应用价值。
通过对GPRS的深入解析,读者可以更好地理解其技术原理、应用价值以及未来发展趋势。
在选择移动设备和服务时,了解这些知识将有助于用户做出更明智的决策。