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),如下图所示

  • 相关阅读:
    接口测试如何在json中引用mock变量
    接口测试--接口文档规范
    接口测试和性能测试的区别
    接口测试和功能测试的区别
    接口请求(get、post、head等)详解
    软件测试流程
    软件测试系统学习流程和常见面试题
    接口测试之json中的key获取
    正则表达式解析
    Jmeter使用HTTPS协议
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/14674298.html
Copyright © 2011-2022 走看看