首页 > 编程知识 正文

rva4500,5eclient是什么文件

时间:2023-05-03 21:09:17 阅读:163776 作者:3306

PE文件基本概念文件对齐和内存对齐RVA、FileOffsetVA和重定向概念

基本概念

在PE文件的学习中,您经常会看到RVA、VA、文件偏移、内存偏移这些概念,这些术语到底是什么意思呢?

PE文件主要有两种状态:加载和卸载。 如果未加载,PE文件中的数据仅限于一个文件中,空间有限。 加载到进程地址空间中后,PE文件具有足够的空间来存储文件中的数据。 结果,段存储的区域变大。 也就是说,各段之间的可用内存变大。 因此,段中许多数据的地址必须相对于未加载时向后偏移。

在前面的文本中,我们谈到了可选标题有两个重要的成员:文件对齐和设置对齐。 这就是对准的粒度。

文件对齐和内存对齐如图所示,没有加载我们的PE文件时,对齐的粒度为0x200h。 假设数据段的起始地址为0x1000h、大小为0x300h,则在进行存储时需要占用两个内存页,而剩馀的0x100h大小的内存不进行处理。 同样,在下一个完整文档页面的开头,继续保存下一部分。 加载PE文件后,如果对齐粒度变为0x1000h,则第一个内存页将数据段存储在前0x300h的空间中,剩下的0x700h内存也不会进行处理。 然后,在下一个0x1000h大小的内存页中,继续保存下一部分。 这就是常说的文件对齐和内存对齐。

RVA和文件偏移如上所述,发生了问题。 如果代码段(中间的黄色部分)有0x1500h函数的偏移地址,则加载到内存中后,此0x1500h地址指向数据段所在页的可用内存。 但是,根据上述图,能够容易地计算出文件内的0x1500h的存储器内的地址为0x1500h-0x1400h0x2000h=0x2100h。 这就是“文件偏移地址”(FileOffset )和“存储器偏移地址”(RVA )。 其中0x1500h是文件偏移,0x2100h是RVA。

如果未加载PE文件,则文件中的所有数据都将以0作为起始地址进行偏移。 这意味着文件偏移地址是文件中的绝对地址。 但是,PE文件加载到内存中后,所有地址都将按ImageBase成员的值进行偏移,因此,内存中实际地址的开头将按文件的偏移地址进行转换,然后添加ImageBase,成为真正的内存

在此,将未加载时某个段的开头地址设为SectionAddress1,将段中的某个地址设为OldAddress,将加载源地址设为ImageBase,将加载后的段的开头地址设为SectionAddress2

NewAddress = OldAddress - SectionAddress1 + SectionAddress2 + ImageBase

VA和重定向的概念在我们的PE文件中,也有像全局变量一样需要用绝对地址保存的成员。 例如,如果全局变量的地址为0x405000h,则ImageBase为0x400000h,代码将使用该全局变量的地址,例如push [0x405000h]堆叠全局变量的值但是,如果我们的PE文件没有按计划加载到ImageBase中,而是加载到其他地址(此处为0x410000h )。 此时,全局变量的地址必须为0x 405000 h-0x 400000 h0x 410000=0x 415000 h,如果重新执行push [0x405000h],将出现错误。 这里的全局变量的地址称为VA,重新计算0x415000h的过程称为重新定位。

如图所示,函数RegOpenKeyW的函数地址为0x30190000,这是VA值,根据需要进行修改。

PE文件的数据目录中有重新定位表。 表中存储了需要重新定位的地址。 如果PE文件未按计划加载到ImageBase中,PE文件将扫描此表以查找需要重新定位的地址,然后根据新的ImageBase重新计算地址。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。