確定節表位置: dos + nt頭下面就是節表.
確定節表數量: 節表數量在檔案頭中存放著.可以準確知道節表有多少個.
節表是乙個結構體陣列.沒乙個節表表示了資料在哪,怎麼儲存.
下方是節的結構體
typedef struct節表重要成員都標紅了.我們知道.pe檔案有兩種狀態.一種是記憶體狀態.一種則是檔案狀態._image_section_header misc;
dword virtualaddress; //載入到記憶體中的第乙個位元組的位址.也就是虛擬位址.節在記憶體中**開始.記憶體中的va + imagebase 才是真正的節開始位置
dword sizeofrawdata; //節在檔案中對齊後的屬性.跟是可選頭中檔案對齊的整數倍. sizeofrawdata /檔案對齊==0
dword pointertorawdata; //在檔案中的偏移.是檔案對齊成員倍數.
dword pointertorelocations; //一下都是除錯相關.
dword pointertolinenumbers; //
word numberofrelocations;
word numberoflinenumbers;
dword characteristics; //節的屬性
} image_section_header, *pimage_section_header;
而節就是分別儲存了記憶體中節展開的位置偏移. 以及檔案展開後.節資料在檔案中的那個偏移位置.
我們分別以pe兩種狀態.來加深一下.在記憶體中跟檔案中節資料起始位置.
virtualaddress 是記憶體中節展開的起始位址.我們可以隨便開啟乙個檔案.檢視記憶體中起始位置值是多少.
隨便開啟乙個檔案看一下節表.可以得出.記憶體中偏移位置是0x1000位置.檔案中節資料的位置是0x400. 偏移+imagebase就是記憶體中開始的位置.我們看一下.
可以看到機器碼為: 40 30 40 00 90 ..... 那麼我們去檔案中看一下,看一下節資料是否相同.
根據上方我們**節表.得出在檔案中的偏移是0x400位置.所以跳轉到檔案偏移處.發現節資料跟記憶體的資料是一樣的.
這也解釋了pe在記憶體中展開跟在檔案中是不一樣的.
也加深了節表中 virtualaddress成員 以及 pointertorawdata成員了.
值得一說節表的大小是 0x28個位元組.也就是兩行半
**一行半可以得出節名稱.節在記憶體中的偏移. 以及節資料在檔案中的偏移.
根據上方節中兩個重要成員我們明白了其意思.那麼我們看看其他成員.
聯合體中的成員.
聯合體中的成員我們一般看第二個.
union misc;virtualsize 虛擬大小.指的就是節資料沒有對齊後的大小.
換句話說就是節的資料真實大小. 但是注意,如果此成員大於sizeofrawdata.那麼就填0.因為實際大小資料.不可能大於對齊後的大小.
sizeofrawdata 這個成員則是對齊後的大小.比如我們節資料大小是0x1ffc 那麼對齊後的大小就是0x2000 就是按照對齊之後進行存放的.對齊是按照檔案對齊進行對齊的.根據檔案對齊後的大小.那麼我們就能確定乙個節資料到底由多大.
檔案中開始的位置已經有了.然後對齊後的大小也已經有了. 檔案開始位置是0x400.對齊後的資料有0x2000.那麼節資料大小就是從0x400開始.佔0x2000大小.那麼結束位置就是0x2400位置.
節的屬性.也就是最後乙個成員.表明了這個節是可讀的可寫的.還是可讀可寫可執行. 具體可以檢視一下巨集.
總結來說節表中重要成員有三個.
1.記憶體中起始位置
2.節資料對齊後大小
3.檔案中起始位置.
根據第二個成員和第三個成員可以得出節資料從**結束. 計算公式 節起始位置+節資料對齊後大小 = 節結束位置.
節屬性也很重要. 這個需要查詢.所以一定牢記.
PE知識複習之PE的兩種狀態
從下面依次網上看.可以得出pe結構 其中dos頭有dos頭結構 也就是 image dos header 關於結構體的各項屬性.前邊已經寫過了.本系列部落格就是加深pe印象.理解複雜的原理.image dos header 大小 64個位元組 十六進製制 0x40位元組 image file hea...
PE2 PE節表的拉伸和偏移
左邊的16進製制就是一堆節表,右邊的視窗可以看見text,rdata等等,這裡顯示的就是節表的名字 節表是什麼?簡單來說,節表就是描述節的資訊,像一本書的目錄一樣 節表的數量由file頭中的numberofsections來控制 dos頭 pe標記 file頭 可選pe頭 節表節表就存在於可選pe頭...
PE的些許知識
pe的組成 image dos header 64bytes 0x3c定位pe標誌 stub 填充區域 image nt headers32 4 20 224 248bytes pe標誌 dword 4bytes image file header 20bytes 0x00 machine word...