我的PE了解

1 篇文章 0 订阅
1 篇文章 0 订阅

一、什么是PE文件。

        PE(Portable Executable)格式,是微软Win32环境可移植可执行文件(如exe、dll、vxd、sys和vdm等)的标准文件格式。

二、PE文件格式

        2.1RVA、VA和OFFSET转换和理解

        OFFSET 就是010Editor以[0x00]开始的文件中的位置       OFFSET  = RVA-所属区段的基址(VirtualAddress) + 所属区段的节基于文件的偏移量(PointerToRawData)

        VA         就是内存映像中的位置,即地址                           VA          = RVA - ImageBase

        RVA       就是内存映像中的位置与文件映射基址的差      RVA        = VA+ImageBase

        2.2PE文件的关键头

        DOS头:

        IMAGE_DOS_HEADER[0x40]:

                 [0x00]WORD   e_magic;  所有MS-DOS兼容的可执行文件都将此值设为0X5A4D(MZ).

                 [0x3c]DWORD e_lfanew;表示PE头起始的位置.

       PE头:文件信息都在其中

       struct _IMAGE_NT_HEADERS {
       0x00 DWORD Signature;                                               //PE头标识
       0x04 _IMAGE_FILE_HEADER FileHeader;             
       0x18 _IMAGE_OPTIONAL_HEADER OptionalHeader;
       };

       IMAGE_NT_HEADERS[0x78]:前面0x78个字段固定

      区段表:保存各个区段的信息,如名称、大小、VOffset、ROffset等

      IMAGE_SECTION_HEADER:

      区段:文件的信息全部在区段中

三、PE文件的数据资源信息——以user32.dll的输出表信息为例

(在文件中保存的位置均为RVA所以在文件中查找位置需要转换为OFFSET)

      输出表信息

      IMAGE_DIRECTORY_ENTRY_EXPORT
      struct _IMAGE_DATA_DIRECTORY {
      0x00 DWORD VirtualAddress;           //0x00010548——>Offset:0x00000948
      0x04 DWORD Size;                             //0x00005A7E
      };

      IMAGE_EXPORT_DIRECTORY[0x28]:0x00000948

      0x0c DWORD Name;文件名称0x00012860——>0x00002C60跳过去就能看见user32.dll

      0x10 DWORD Base;函数基序号0x000005DC

      0x14 DWORD NumberOfFunctions;        函数数量      3EB
      0x18 DWORD NumberOfNames;             函数名数量 336
      0x1c DWORD AddressOfFunctions;         函数地址     0x00010570——>0x00000970

      跳过去0x000789CB——>0x00068DCB过去后是函数的OPCODE
      0x20 DWORD AddressOfNames;             函数名地址 0x0001151C——>0x0000191C

      跳过去0x0001286B——>0x00002C6B后面就是一个一个的函数名了
      0x24 DWORD AddressOfNameOrdinals;序号地址     0x000121F4——>0x000025F4跳过去就是函数的序号


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值