pe结构之初体验(一)

本文介绍了PE文件的基础知识,包括PE文件的环境、格式特点、基本概念和相关名词解释。重点讲解了PE文件的结构,如DOS头、PE文件头(IMAGE_NT_HEADER)和IMAGE_FILE_HEADER中的关键字段,为理解Windows下可执行文件的内部工作原理提供了基础。
摘要由CSDN通过智能技术生成

本人只是近期在学习pe结构,顺便写了一下,如果有错的地方请大神多多指教。

一、环境

    IDE:010 Editor或ultraedite


    pe工具:StudyPE+

    反汇编:W32DasmV10.0等,有些工具以后用的了我再说,我刚开通CSDN,也不知道怎么上传,大家可以在网上下载,如果需要可以留言我发给你,或者那天我会上传了我会把这些工具上传,大家可以下载。

二、基础知识

   pe文件初识

  • PE(Portable Execute)文件是Windows下可执行文件的总称,wiki百科[12]将PE文件描述为“可移植的可执行文件”,是一种主要使用在32位和64位Windows操作系统上的文件格式。常见的PE文件格式主要用于DLL文件、EXE文件、SYS文件等,PE文件的判断标准不由文件扩展名决定,而是依据其独特的文件结构。


(1)EXE和DLL文件之间的区别完全是语义上的,因为他们使用完全相同的PE格式。而唯一的区别就是用一个字段标识出这个文件是EXE还是DLL。

(2)64位Windows只是对PE格式做了一些简单的修饰,新格式叫PE32+。并没有任何新的结构加进去,改变的只是简单的将32位字段扩展成64位。(windows NT架构的可执行文件的格式就是PE格式)

(3)PE格式定义的主要地方位于我们的头文件winnt.h,这个头文件中几乎能找到关于PE文件的所有定义

(4)PE文件中的数据结构一般都有32位和64位之分,一般在名称上会表现出来:例如IMAGE_NT_HEADERS32 或 IMAGE_NT_HEADER64

(5)PE文件框架结构图:(如下)

三、PE的基本概念
(1)PE文件使用的是一个平面地址空间或线性的的地址空间,所有代码和数据都被合并在一起,组成一个很大的结构。文件的内容被分割为不同的区块,块中包含代码或数据。各个区块按页边界来对齐,区块没有大小限制,是一个连续的结构。此外,每个块有自己在内存中的一套属性,比如说这个区块是否包含代码、是否只读或可读/写等。

(2)PE文件不是作为单一内存映射文件被装入内存的。

(3)Windows加载器(又称PE装载器)遍历PE文件并决定文件的哪一部分被映射(比如说调试信息是不会被映射的,我们调试的时候才会用到).这种映射方式是将文件较高的偏移位置映射到较高的内存地址中,低的就映射到低的内存地址。

(4)当磁盘文件一旦被装入内存中,磁盘上的数据结构布局和内存中的数据结构布局是一致的。

(5)这样如果知道在磁盘的数据结构中寻找一些内容,那么几乎都能在被装入到内存映射文件中找到相同的信息。但数据之间的相对位置可能按比例变大变小了,其某项的偏移地址可能区别于原始的偏移位置,不管怎样,所有表现出来的信息都允许从磁盘文件偏移到内存偏移的转换。

(6)PE文件磁盘与内存映像结构图:清晰的反应了映射到内存中结构布局是一致的,只是数据之间的相对位置发生了

四、PE相关名词解释
(1)基地址(ImageBase):文件执行时将被映射到指定内存地址中(加载文件会先加载到内存中,也就是映射了)的起始地址被称为模块句柄,这个初始内存地址也称为基地址。这个值是由PE文件本身设定的。(按照默认设置,用Visual C++建立的EXE文件基地址是00400000h,DLL文件基地址是10000000h。但是,这个值可以自己在编译器设定的。)
获取基地址的函数:HMODULE GetModuleHandle(LPCTSTR lpModuleName)        //HMODULE 返回值,也就是我们获取到的句柄。LPCTSTR指针指向lpModuleName(想要获取的句柄的模块)

(2)虚拟地址(Virtual Address, VA)
由于Windows程序运行在保护模式下,所以应用程序访问存储器所使用的逻辑地址称为虚拟地址(因为他不是真正的物理地址,真正的物理地址被windows老大妈的保护

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值