zoukankan      html  css  js  c++  java
  • VirtualAddress与VirtualSize与SizeOfRawData与PointerToRawData的关系

    VirtualSize:内存中大小(内存对齐前的长度)
    VirtualAddress:内存中偏移
    SizeOfRawData:文件中大小(文件对齐后的长度)
    PointerToRawData:文件中偏移

    其实VirtualAddress 和 PointerToRawData 都很好理解,VirtualAddress就是在加载进内存状态下的偏移地址, PointerToRawData就是在文件状态下的偏移地址

    VirtualSize,这个其实很特别,被标注为内存对齐前的长度,我们知道内存对齐大小是跟SectionAlignment有关系的,我们这里拿notepad.exe来举个例子,此时这个文件的文件对齐大小和内存对齐大小就是不一样的,如下图所示

    我们再去看下这个程序的第一个节的相关属性

    继续观察,VirtualSize这个到底是什么呢?这图中第一个节显示的VirtualSize大小为00007748,而VirtualAddress则是内存中的偏移,我们接着用winhex来打开内存状态下的notepad进行观察,很明显确实是从偏移地址0x1000开始的第一个节数据

    继续看VirtualSize为00007748,那么意思就是该程序内存状态下的第一个节数据的大小为0x1000 - 0x1000+0x7748(0x8748),那么就去到0x8748来进行观察,确实第一个节数据就到了0x8748就结束了

    那么大家会不会有一个疑问?后面的数据为什么都是00,也就是都是空白的呢?

    我们之前说了VirtualSize是内存状态下未对齐的实际大小,所以这时候回过头来看下内存状态的对齐大小为0x1000,所以这个0x7748对齐大小就是0x8000,那么再加上偏移0x1000,也就是0x9000了,如下图所示,确实到了0x9000就结束了(0x9000之前的数据全部为00)

    到了这里其实应该已经了解了VirtualSize和VirtualAddress了,那么继续看SizeOfRawData和PointerToRawData,这个其实就是文件状态下的情况,如下图所示,PointerToRawData从0x400开始

    SizeOfRawData则是0x7800+0x400(0x7c00),如下图所示

  • 相关阅读:
    802.11协议网文转载
    三角函数公式大全
    IEEE 802.11ac Standard
    FPGA设计如何进行面积优化
    直流偏差消除
    I/Q不平衡补偿
    WiFi6剩余频偏的影响
    SQL SERVER 调优等待类型
    Nginx
    fatal: HttpRequestException encountered解决方法
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/14674298.html
Copyright © 2011-2022 走看看