PE檔案結構(二) 區塊,檔案偏移與RVA轉換
PE檔案結構(二)
參考
書:《加密與解密》
視訊:小甲魚 解密系列 視訊
區塊
在區塊表 後面的就是一個一個區塊,每個區塊佔用對齊值的整數倍,一般的檔案都有程式碼塊 跟 資料塊( 它們的名字一般為.text 跟 .data 但這是可以修改的)。每個區塊的資料具有相同的屬性。編譯器先在obj中生成不同的區塊, 連結器再按照一定的規則合併不同obj跟庫中的快。例如每個obj中肯定有.text 塊, 聯結器就會把它們合併成一個單一的.text 塊;再如,如果兩個區塊具有相同的的屬性就有可能被合併成一個塊。
檔案偏移與RVA轉換
因為磁碟對齊跟記憶體對齊可能不同。還有每個塊必須是對齊值的整數倍即在磁碟中可執行檔案的每個塊的大小是磁碟對齊值的整數倍,程式載入到記憶體中後塊的大小是記憶體對齊值的整數倍。會導致檔案偏移與RVA轉換的不同,需要轉換。
例子:轉換輸入表的RVA與檔案偏移
通過檢視可執行檔案的二進位制可以找到輸入表的RVA,但是不能找到輸入表的檔案偏移。
先檢視這個可執行檔案的二進位制,可以發現這個程式的磁碟對齊為200h記憶體對齊為1000h(IMAGE_OPTIONAL_HEADER中的SectionAlignment跟FileAlignment)
圖片1
用LoadPE可以方便的得到:
圖片2
再從可執行檔案的二進位制找到輸入表的RVA(IMAGE_OPTIONAL_HEADER中的DataDirectory[1]就是輸入表的資訊)
圖片3
也可以通過LoadPE方便的檢視(點選目錄,檢視輸入表的RVA):
圖片4
轉化檔案偏移與RVA,通過上面的資訊還不夠,還需要每個區塊在檔案中跟在記憶體中的起始地址,可以用LoadPE方便的檢視(點選 區段 即可):
圖片5
輸入表的RVA為204Ch,可以通過區段表知道,它在 .rdata 區段中,它相對 .rdata 頭 的值為 4Ch。.rdata 斷在磁碟中開始 的 檔案偏移值為A00h,
用4Ch 加 A00h 即可得到輸入表的檔案偏移為A4Ch,通過LoadPE的“位置計算器” 可驗證輸入表的檔案偏移值確實是A4Ch。
圖片6
相關文章
- 記憶體偏移(RVA)與檔案偏移(offset)相互轉換記憶體
- PE檔案格式的RVA概念
- PE 檔案結構圖
- PE檔案結構複習
- PE檔案結構解析3
- PE檔案結構解析1
- PE檔案結構解析2
- PE檔案結構(五)基址重定位
- PE檔案結構(四) 輸出表
- ASM 檔案與本地檔案的轉換ASM
- 再探.NET的PE檔案結構(安全篇)
- PE檔案格式
- BMP檔案結構 (轉)
- win32 PE 檔案格式 (轉)Win32
- 手工構造一個超微型的 PE 檔案 (轉)
- PE檔案格式詳細解析(二)--IAT
- VCD結構與Mplayer播放.DAT檔案(轉)
- 文字檔案與二進位制檔案的區別
- 深入剖析PE檔案
- PDF檔案轉換為DWF檔案
- WOR檔案轉換成GST檔案
- Torrent檔案的解析與轉換
- java 字串與檔案相互轉換Java字串
- 將Schema檔案轉換為Java檔案Java
- 把 .xyz 檔案轉換成 .ply 檔案
- 轉換RDBA的檔案和資料塊地址(轉)
- PE結構各欄位偏移參考
- 類檔案結構_class類檔案的的結構
- ODBC檔案DSN 的結構 (轉)
- 二、Linux檔案系統結構Linux
- oracle 體系結構-控制檔案(二)Oracle
- 第二部分 PE檔案格式
- 如何將.ipynb檔案轉換為.py檔案
- Java 檔案換行符識別與轉換Java
- BMP檔案結構
- tkprof 轉換trc檔案
- Ecshop檔案結構,二次開發
- jeesite檔案結構與jeesite.properties