PE文件格式分析心得

2016-02-19 12:39 7 1 收藏

今天给大家分享的是由图老师小编精心为您推荐的PE文件格式分析心得,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

【 tulaoshi.com - 编程语言 】


  PE文件格式最近似乎炒得沸沸扬扬,由于我正在做一个这样的程序,索性将自己的心得写出来与大家同享。
    PE文件头分两大部分:
  1:DOS ‘MZ’ HEADER
  2:IMAGE_NT_HEADERS
    其中IMAGE_NT_HEADERS中包含
  PE signature
  IMAGE_FILE_HEADER
  IMAGE_OPTIONAL_HEADER(其中包含Data Direcotry)
    文件头后紧跟着为
  Section Table (array of IMAGE_SECTION_HEADERs)
    在Delphi的windows.pad中已经有定义的有:
  TImageDosHeader;
  TImageNtHeaders;
  TImageSectionHeader; { size of TIm..der is $28 }
    定义变量后按住Ctrl可以察看具体的项目,这里我就不多说了,这方面的东西也很多。
    而其他的如TImageResourceDirectory等,在DELPHI中却没有定义,察看其他资料,我在这里给出他们的结构和简单说明:
    以下是我写的PEDump.exe的类型说明:
  
  type
    PIMAGE_RESOURCE_DIRECTORY = ^TImageResourceDirectory;
    _IMAGE_RESOURCE_DIRECTORY = packed record
      Characteristics:DWord;
      TimeDateStamp:DWORD;
      MajorVersion:WORD;
      MinorVersion:WORD;
      NumberOfNamedEntries:WORD;
      NumberOfIdEntries:WORD;
    end;
    TImageResourceDirectory = _IMAGE_RESOURCE_DIRECTORY;
    { 资源目录的格式说明 }
  
    PIMAGE_RESOURCE_DIRECTORY_ENTRY = ^TImageResourceDirectoryEntry;
    _IMAGE_RESOURCE_DIRECTORY_ENTRY = packed record
      Name:DWORD;         { NameOffset:31,NameIsString:1 }
  //    Id:WORD;
      OffsetToData:DWORD; { OffsetToDirectory:31,DataIsDirectory:1 }
    end;
    TImageResourceDirectoryEntry = _IMAGE_RESOURCE_DIRECTORY_ENTRY;
    { 资源目录进入点的格式说明 }
  
    PIMAGE_RESOURCE_DIRECTORY_STRING = ^TImageResourceDirectoryString;
    _IMAGE_RESOURCE_DIRECTORY_STRING = packed record
      Length:WORD;
      NameString:CHAR;
    end;
    TImageResourceDirectoryString = _IMAGE_RESOURCE_DIRECTORY_STRING;
    { 资源目录名的格式说明 }
  
    PIMAGE_RESOURCE_DIR_STRING_U = ^TImageResourceDirStringU;
    _IMAGE_RESOURCE_DIR_STRING_U = packed record
      Length:WORD;
      NameString:WCHAR;
    end;
    TImageResourceDirStringU = _IMAGE_RESOURCE_DIR_STRING_U;
  
     { unicode形式的资源目录名的格式说明 }
  
    PIMAGE_RESOURCE_DATA_ENTRY = ^TImageResourceDataEntry;
    _IMAGE_RESOURCE_DATA_ENTRY = packed record
      OffsetToData:DWORD;
      Size:DWORD;
      CodePage:DWORD;
      Reserved:DWORD;
    end;
    TImageResourceDataEntry = _IMAGE_RESOURCE_DATA_ENTRY;
    { 资源目录数据进入点的格式说明 }
  
  const
    IMAGE_RESOURCE_NAME_IS_STRING = $80000000;
    { 检测TImageResourceDirectoryEntry.Name的最高为是否设立,
      是则说明剩下的31位指向IMAGE_RESOURCE_DIR_STRING_U的偏移,
      否则说明剩下的31位为一个整数ID。 }
    IMAGE_RESOURCE_DATA_IS_DIRECTORY = $80000000;
    { 检测TImageResourceDirectoryEntry.OffsetToData的最高为是否设立,
      是则说明剩下的31位指向另一个IMAGE_RESOURCE_DIRECTORY的偏移,
      否则说明剩下的31位指向IMAGE_RESOURCE_DATA_ENTRY的偏移。 }
  
    { 以下是文件属性具体值常量说明 }
    { File Characteristics }
    IMAGE_FILE_RELOCS_STRIPPED           = $0001; // Relocation info stripped from file.
    IMAGE_FILE_EXECUTABLE_IMAGE          = $0002; // File is executable.
    IMAGE_FILE_LINE_NUMS_STRIPPED        = $0004; // Line nunbers stripped from file.
    IMAGE_FILE_LOCAL_SYMS_STRIPPED       = $0008; // Local symbols stripped from file.
    IMAGE_FILE_AGGRESIVE_WS_TRIM         = $0010; // Agressively trim working set
    IMAGE_FILE_LARGE_ADDRESS_AWARE       = $0020; // App can handle 2gb addresses
    IMAGE_FILE_BYTES_REVERSED_LO         = $0080; // Bytes of machine word are reversed.
    IMAGE_FILE_32B99v_MACHINE             = $0100; // 32 bit word machine.
    IMAGE_FILE_DEBUG_STRIPPED            = $0200;  
    // Debugging info stripped from file in .DBG file
    IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP   = $0400;  
    // If Image is on removable media, copy and run from the swap file.
    IMAGE_FILE_NET_RUN_FROM_SWAP         = $0800;  
    // If Image is on Net, copy and run from the swap file.
  
     IMAGE_FILE_SYSTEM                    = $1000; // System File.
    IMAGE_FILE_DLL                       = $2000; // File is a DLL.
    IMAGE_FILE_UP_SYSTEM_ONLY            = $4000; // File should only be run on a UP machine
    IMAGE_FILE_BYTES_REVERSED_HI         = $8000; // Bytes of machine word are reversed.
  
    { 以下是文件头机器属性值的具体说明 }
    { Machine }
    IMAGE_FILE_MACHINE_UNKNOWN           = $0;
    IMAGE_FILE_MACHINE_I386              = $014c; // Intel 386.
    IMAGE_FILE_MACHINE_R3000             = $0162; // MIPS little-endian, $160 big-endian
    IMAGE_FILE_MACHINE_R4000             = $0166; // MIPS little-endian
    IMAGE_FILE_MACHINE_R10000            = $0168; // MIPS little-endian
    IMAGE_FILE_MACHINE_WCEMIPSV2         = $0169; // MIPS little-endian WCE v2
    IMAGE_FILE_MACHINE_ALPHA             = $0184; // Alpha_AXP
    IMAGE_FILE_MACHINE_SH3               = $01a2; // SH3 little-endian
    IMAGE_FILE_MACHINE_SH3E    

来源:http://www.tulaoshi.com/n/20160219/1601395.html

延伸阅读
标签: 电脑入门
JPS即JPEG Stereo,是一种3d图像格式。JPS文件格式其实就是JPEG文件格式,只是它同时存储了左眼看到的图(在右边)及右眼看到的图(在左边)。 为形成立体视觉,左右差异不会很大。
标签: 电脑入门
CAJ全文浏览器是中国期刊网的专用全文格式阅读器,它支持中国期刊网的CAJ、NH、KDH和PDF格式文件。它可以在线阅读中国期刊网的原文,也可以阅读下载到本地硬盘的中国期刊网全文。它的打印效果可以达到与原版显示一致的程度。
标签: 电脑入门
XTF格式(eXtended Triton Format)用来存储多种类型的设备数据,包括声纳、导航、遥测及测深信息。这种数据格式保留了原有设备的数据格式,更方便将来数据的扩展。 XTF文件由许多数据包组成,每个数据包前面都有关于数据类型和大小的说明。如果处理软件读取时,不需要或不能读取某个数据包,则根据数量大小直接跳过去即可。 所有XTF文件都是由...
标签: 电脑入门
PFL文件格式是一种视频动画文件格式。PFL格式文件可以通过MusicFriend软件来制作。它最高支持15帧/秒的视频采样。 PFL格式文件是PhotoFiltre studio(一款功能强大、容易上手的图像编辑软件)的插件文件,类似滤镜的特效,在滤镜菜单中可以找到。
标签: 电脑入门
*.tvp 天天动听V3.3.0及以上版本可的视化效果配置文件,后缀为tvp,存在放在x:/ttpod/plugins/内。(注:x 代表软件安装盘,如,C:,E:盘)

经验教程

643

收藏

54
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部