zoukankan      html  css  js  c++  java
  • PE文件结构及其加载机制(四)

    下面我们开始学习节表。

    不知道还记不记得在前面哪个结构体中出现过节的数量?

    嘿嘿,忘记了吧,我们翻开以前的记录,看看。

    原来是

    typedef struct IMAGE_NT_HEADERS
      {
            DWORD Signature;
            IMAGE_FILE_HEADER FileHeader;
            IMAGE_OPTIONAL_HEADER32 OptionalHeader;
      }IMAGE_NT_HEADERS,*PIMAGE_NT_HEADERS; 

    中的

    typedef struct _IMAGE_FILE_HEADER {   
            WORD      Machine;                 //运行平台 
            WORD      NumberOfSections;        //块(section)数目      
            DWORD     TimeDateStamp;           //时间日期标记     
            DWORD     PointerToSymbolTable;    //COFF符号指针,这是程序调试信息    
            DWORD     NumberOfSymbols;         //符号数  
            WORD      SizeOfOptionalHeader;    //可选部首长度,是IMAGE_OPTIONAL_HEADER的长度    
            WORD      Characteristics;         //文件属性 
    }

    第二个成员就是了。

    我们回去找找这个程序的这个值是多少。

    原来是四个节啊,当然了,也可以说四个段。

    果然是四个段。

    好了,复习完需要的知识,我们就继续学习。

    ================================================

    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;
    

     同样的,这也是一个结构体,而且有几个节,就有几个这种类似的结构体。

    "#define IMAGE_SIZEOF_SHORT_NAME 8"    原来是个8

  • 相关阅读:
    oh forever love~
    PostgreSQL数据库忘记密码的解决方案
    vue
    无法启动postgresql的错误
    Goaccess解析nginx日志备忘
    pg备份恢复与设置编码
    django+uwsgi+nginx+postgresql备忘
    Git 直接推送到生产服务器
    为了性能, 数据操作尽量在数据库层面进行
    简单理解call_user_func和call_user_func_array两个函数
  • 原文地址:https://www.cnblogs.com/tk091/p/2670936.html
Copyright © 2011-2022 走看看