【加密与解密(第四版)】第十一章笔记

第十一章 PE文件格式

这一章比较熟悉,但就是易学难精

PE文件衍生于早期建立在VAX/VMS上的COFF文件格式。

11.1-4 PE的基本概念、MS-DOS头部、PE文件头、区块

RVA=VA-ImageBsae

PNTHeader=ImageBase+dosHeader->e_lfanew

64位的IMAGE_NT_GEADER和32位的几乎没有区别

    typedef struct _IMAGE_DOS_HEADER {

      WORD e_magic;

      WORD e_cblp;

      WORD e_cp;

      WORD e_crlc;

      WORD e_cparhdr;

      WORD e_minalloc;

      WORD e_maxalloc;

      WORD e_ss;

      WORD e_sp;

      WORD e_csum;

      WORD e_ip;

      WORD e_cs;

      WORD e_lfarlc;

      WORD e_ovno;

      WORD e_res[4];

      WORD e_oemid;

      WORD e_oeminfo;

      WORD e_res2[10];

      LONG e_lfanew;

    } IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;



    typedef struct _IMAGE_NT_HEADERS64 {

      DWORD Signature;

      IMAGE_FILE_HEADER FileHeader;

      IMAGE_OPTIONAL_HEADER64 OptionalHeader;

    } IMAGE_NT_HEADERS64,*PIMAGE_NT_HEADERS64;

    typedef struct _IMAGE_NT_HEADERS {

      DWORD Signature;

      IMAGE_FILE_HEADER FileHeader;

      IMAGE_OPTIONAL_HEADER32 OptionalHeader;

    } IMAGE_NT_HEADERS32,*PIMAGE_NT_HEADERS32;



    typedef struct _IMAGE_FILE_HEADER {

      WORD Machine;

      WORD NumberOfSections;

      DWORD TimeDateStamp;

      DWORD PointerToSymbolTable;

      DWORD NumberOfSymbols;

      WORD SizeOfOptionalHeader;

      WORD Characteristics;

    } IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;


    typedef struct _IMAGE_OPTIONAL_HEADER {

      WORD Magic;

      BYTE MajorLinkerVersion;

      BYTE MinorLinkerVersion;

      DWORD SizeOfCode;

      DWORD SizeOfInitializedData;

      DWORD SizeOfUninitializedData;

      DWORD AddressOfEntryPoint;

      DWORD BaseOfCode;

      DWORD BaseOfData;

      DWORD ImageBase;

      DWORD SectionAlignment;

      DWORD FileAlignment;

      WORD MajorOperatingSystemVersion;

      WORD MinorOperatingSystemVersion;

      WORD MajorImageVersion;

      WORD MinorImageVersion;

      WORD MajorSubsystemVersion;

      WORD MinorSubsystemVersion;

      DWORD Win32VersionValue;

      DWORD SizeOfImage;

      DWORD SizeOfHeaders;

      DWORD CheckSum;

      WORD Subsystem;

      WORD DllCharacteristics;

      DWORD SizeOfStackReserve;

      DWORD SizeOfStackCommit;

      DWORD SizeOfHeapReserve;

      DWORD SizeOfHeapCommit;

      DWORD LoaderFlags;

      DWORD NumberOfRvaAndSizes;

      IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];

    } IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32;

区块表

  typedef struct _IMAGE_SECTION_HEADER {

      BYTE Name[IMAGE_SIZEOF_SHORT_NAME];

      union {

  DWORD PhysicalAddress;

  DWORD VirtualSize;

      } Misc;

      DWORD VirtualAddress;

      DWORD SizeOfRawData;

      DWORD PointerToRawData;

      DWORD PointerToRelocations;

      DWORD PointerToLinenumbers;

      WORD NumberOfRelocations;

      WORD NumberOfLinenumbers;

      DWORD Characteristics;

    } IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;

RVA和FOA的转换

11.5 输入表

11.7 输出表

11.8 基址重定位

11.9 资源

11.10 TLS初始化

11.11 调试目录

11.12 延迟载入数据

11.13 程序异常数据

11.14 .NET头部

11.15 编写PE分析工具

检查文件格式、读取FileHeader和OptionalHeader的内容、得到数据目录表的信息、区块表信息、输出表信息、输入表信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NovFif

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值