PE(二)-节表

节表

节表的结构

  • winnt.h中的定义
#define IMAGE_SIZEOF_SHORT_NAME 8
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;
/**
 *    1、Name	8个字节 一般情况下是以"\0"结尾的ASCII吗字符串来标识的名称,内容可以自定义.
 *
 *    注意:该名称并不遵守必须以"\0"结尾的规律,如果不是以"\0"结尾,系统会截取8个字节的长度进行处理.	
 *
 *    2、Misc  双字 是该节在没有对齐前的真实尺寸,该值可以不准确。	
 *
 *    3、VirtualAddress 节区在内存中的偏移地址。加上ImageBase才是在内存中的真正地址.	
 *
 *    4、SizeOfRawData  节在文件中对齐后的尺寸.	
 *
 *    5、PointerToRawData 节区在文件中的偏移.	
 *
 *    6、PointerToRelocations 在obj文件中使用 对exe无意义	
 *
 *    7、PointerToLinenumbers 行号表的位置 调试的时候使用	
 *
 *    8、NumberOfRelocations 在obj文件中使用  对exe无意义	
 *
 *    9、NumberOfLinenumbers 行号表中行号的数量 调试的时候使用
 **/
  • DWORD Characteristics的属性值的意义(简化)

    数据位 常量符号 置为1时的含义
    5 00000020h 节中包含代码
    6 00000040h 节中包含已初始化数据
    7 00000080h 节中包含未初始化数据
    8 00000100h 保留供将来使用
    25 02000000h 节中的数据在进程开始后将被丢弃,如 .reloc
    26 04000000h 节中的数据不会经过缓存
    27 08000000h 节中的数据不会被交换到磁盘
    28 10000000h 表示节中的数据将被不同的进程所共享
    29 20000000h 映射到内存后的页面包含可执行的属性
    30 40000000h 映射到内存后的页面包含可读属性
    31 80000000h 映射到内存后的页面包含可写属性
  • 节表的个数

    有几个节表,就有几个节

    节表个数存储在的FILE_HEADER第二个字段WORD NumberOfSections

  • 图解

节表的位置

  • 不管是在磁盘、FileBuffer还是ImageBuffer中,三者的头大小都是相同的,节表的位置紧接着OPTIONAL_HEADER
  • OPTIONAL_HEADER的大小是可以计算的,再加上DOS_HEADERFILE_HEADER的大小是固定的,所以可以计算出节表的位置

OPTIONAL_HEADER的大小

  • FILE_HEADER中的SizeOfOptionalHeader指定了后面OPTIONAL_HEADER的大小

  • 就这个大小而言,32位为e0h,64位为f0h

  • 各头文件大小

    • DOS_HEADER :64Byte
    • FILE_HEADER:20Byte
    • OPTIONAL_HEADER:SizeOfOptionalHeader
  • 计算:e_lfanew + 4 + 14 + optinalSize,例子如下

    节表位置=E0h+4h+14h+E0h=1D8h

    一个节表的大小为36Byte,每个节表是相邻的

PE加载的过程

posted @ 2021-09-21 14:59  Ybitsec  阅读(141)  评论(0编辑  收藏  举报