压缩与脱壳
pe教程1: pe文件格式一览 【相关文章:Vista上市在即 欧洲安全厂商时刻警惕】
第一节 pe文件格式 【扩展阅读:微软加大反盗版力度 非正版Vista无法】
本教程就让我们浏览一下 pe文件格式的概要。 【扩展信息:Vista加入新认证技术 争取企业客户】
pe 的意思就是 portable executable(可移植的执行体)。它是 win32环境自身所带的执行体文件格式。它的一些特性继承自 unix的 coff (common object file format)文件格式。"portable executable"(可移植的执行体)意味着此文件格式是跨win32平台的 : 即使windows运行在非intel的cpu上,任何win32平台的pe装载器都能识别与使用该文件格式。当然,移植到不同的cpu上pe执行体必然得有一些改变。所有 win32执行体 (除了vxd与16位的dll)都使用pe文件格式,包括nt的内核模式驱动程序(kernel mode drivers)。因而研究pe文件格式给了我们洞悉windows结构的良机。
dos mz header dos stub pe header section table section 1 section 2 section ... section n
上图是 pe文件结构的总体层次分布。所有 pe文件(甚至32位的 dlls) 必须以一个简单的 dos mz header 开始。我们通常对此结构没有太大兴趣。有了它,一旦程序在dos下执行,dos就能识别出这是有效的执行体,然后运行紧随 mz header 之后的 dos stub。dos stub实际上是个有效的 exe,在不支持 pe文件格式的操作系统中,它将简单显示一个错误提示,类似于字符串 "this program requires windows" 或者程序员可根据自己的意图实现完整的 dos代码。通常我们也不对 dos stub 太感兴趣: 因为大多数情况下它是由汇编器/编译器自动生成。通常,它简单调用中断21h服务9来显示字符串"this program cannot run in dos mode"。
紧接着 dos stub 的是 pe header。 pe header 是pe相关结构 image_nt_headers 的简称,其中包含了许多pe装载器用到的重要域。当我们更加深入研究pe文件格式后,将对这些重要域耳目能详。执行体在支持pe文件结构的操作系统中执行时,pe装载器将从 dos mz header 中找到 pe header 的起始偏移量。因而跳过了 dos stub 直接定位到真正的文件头 pe header。
... 下一页