zoukankan      html  css  js  c++  java
  • PE结构学习笔记(四)

    Chinese:

    这个篇幅将通过一个具体实例来从16进制文本中找到区块表

    1、首先用一个16进制编辑器(UltraEdit, WinHex etc..)打开一个可执行文件(exe)

    2、在00000200h找到PE Header,+04h的偏移地址是File Header,+14h的地址记录了IMAGE_OPTIONAL_HEADER32结构的大小

    3、+18h是OptionalHeader,OptionalHeader的地址加上SizeOfOptionalHeader即为区块表的地址:00000218h + E0h = 000002F8h

    4、区块表结构如下:

    typedef struct IMAGE_SECTION_HEADER
    
    {
    
    BYTE Name[IMAGE_SIZEOF_SHORT_NAME];  //节表名称,如".text", IMAGE_SIZEOF_SHORT_NAME=4
    
    union
    
    {
    
    DWORD PhysicalAddress;  //物理地址
    
    DWORD VirtualSize;  //真实长度
    
    } Misc;
    
    DWORD VirtualAddress;  //节区的RVA地址
    
    DWORD SizeOfRawData;  //在文件中对齐后的尺寸
    
    DWORD PointerToRawData;  //在文件中的偏移量
    
    DWORD PointerToRelocations;  //在obj文件中使用,重定位的偏移
    
    DWORD PointerToLinenumbers;  //行号表的偏移(供调试使用地)
    
    WORD NumberOfRelocations;  //在ojb文件中使用,重定位项数目
    
    WORD NumberOfLinenumbers;  //行号表中行号的属木
    
    DWORD Characteristics;  //节属性 如可读、可写、可执行等
    
    } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

    可以算出每个区块表的结构占40个字节,专成16进制就是28h,也就是说第二个区块表的地址是0x000002F8h + 28h = 0x00000320h

    5、同理可以算出第三个、第四个、第五个。。。

  • 相关阅读:
    sqlserver 字符串拆分和取某分隔符之前的字符串
    三目运算符引发的一次事故
    SqlServer 查询死锁,杀死死锁进程*转载
    sql不带锁查询
    各种replace待续
    jmeter压力测试
    docker基础学习
    被动式pocscan扫描神器搭建
    (转)Ubuntu 17.04_64上搭建巡风扫描系统(资产信息漏洞扫描内网神器)
    (转)搭建本地 8.8 W 乌云漏洞库
  • 原文地址:https://www.cnblogs.com/maplewan/p/3231343.html
Copyright © 2011-2022 走看看