PE結構詳解(加殼脫殼必備知識)第二篇·存儲地址介紹

昨天分享了一篇PE結構詳解(加殼脫殼必備知識),本篇是上一篇續篇,主要介紹關於PE結構的三種存儲地址 VA、RVA、FILEOFFSET及轉換方式,希望對你有所幫助。

一、關於VA、RVA、FILEOFFSET

  • VA:虛擬地址,PE文件映射到內存後的地址。
  • RVA:相對虛擬地址,內存地址相對於映射基地址的偏移地址。
  • FileOffset:文件偏移地址,相對PE文件在磁盤上的文件開頭的偏移地址。

在磁盤上文件是按照IMAGE_OPTIONAL_HEADER的FileAligment值進行對其的。而內存中是按照IMAGE_OPTIONAL_HEADER的SectionAligment值進行對其的,關於該信息請參考PE結構詳解(加殼脫殼必備知識)

FileAligment是以磁盤扇區爲單位進行對齊,最小爲512字節(十六進制:0x200),SectionAligment是以內存分頁爲單位進行對齊,一般win32位4K(十六進制:0x1000)。

通常情況FileAligment與SectionAligment值是相同的,這樣磁盤文件與內存文件的結構完全一樣。當不一樣時,磁盤文件與內存映像的同一節表數據在磁盤和內存的偏移不同,則需要進行地址轉換了,一般轉換方式分爲VA(虛擬地址)轉RVA(相對虛擬地址),RVA(相對虛擬地址)轉FileOffset(文件偏移地址)。下面我們還是通過“hello word”案例來舉例。helloword代碼請見上篇文章PE結構詳解(加殼脫殼必備知識)​​​​​​​​​​​​​​

二、轉換方式

1.1 VA轉RVA

VA轉RVA非常簡單,VA值減去IMAGE_OPTIONAL_HEADER結構體中的ImageBase(映像文件裝載虛擬地址)字段的值。即:RVA=VA-ImageBase;

1.2 RVA轉FileOffset

文件偏移=該數據所在節的起始文件偏移(R.偏移)+(某數據的RVA-該數據所在節的起始RVA)。

在計算偏移時,word類型偏移爲2;byte類型偏移爲1;Dword類型爲4,小夥伴記住後方便計算。

PE結構詳解(加殼脫殼必備知識)第二篇·存儲地址介紹

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章