91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

win32下PE文件分析之節表

發布時間:2020-06-25 20:11:04 來源:網絡 閱讀:1901 作者:daye8ku 欄目:安全技術

win32下PE文件分析之節表

接上一篇的win32下PE文件分析之NT頭

(一).FileBuffer與ImageBuffer

    (1).FileBuffer是將文件原原本本的讀入申請的內存區域中,那部分區域就是FileBuffer,里面的內容與磁盤中的文件一模一樣.如下圖:

win32下PE文件分析之節表


    (2).ImageBuffer是按照一定規則加載到內存中的某個區域,并且通過一定的處理,能立刻執行的區域,那部分區域叫做ImageBuffer.其大小就是可選PE頭中的SizeOfImage.結構如下圖:

win32下PE文件分析之節表

    (3).二者之間的關系:

        ImageBuffer是按照文件FileBuffer中給定的條件,按照一定的規定加載到ImageBuffer.如果內存對齊與文件對齊大小一樣,則ImageBuffer幾乎是FileBuffer的一份完整拷貝(圖中×××部分是節表中的Misc).


(二).節表:

    從上面的圖中,可以看到節表的位置就挨著可選PE頭的,所以只要從FileBuffer的起始位置加上幾個頭的大小,就是節表的位置.一個PE文件中,節表的數量可能不一樣.各個節表是緊挨著的.以下是Visual C++ 6.0中winnt.h中定義的節表結構:

#define IMAGE_SIZEOF_SHORT_NAME              8

typedef struct _IMAGE_SECTION_HEADER {
    BYTE    Name[IMAGE_SIZEOF_SHORT_NAME];        //該節的名字
    union {    
            DWORD   PhysicalAddress;
            DWORD   VirtualSize;
    } Misc;                                       //該節在內存中對齊前的大小
    DWORD   VirtualAddress;                       //該節在ImageBuffer中的偏移
    DWORD   SizeOfRawData;                        //該節在文件中對齊后的大小
    DWORD   PointerToRawData;                     //該節在在文件中的偏移
    DWORD   PointerToRelocations;        
    DWORD   PointerToLinenumbers;
    WORD    NumberOfRelocations;
    WORD    NumberOfLinenumbers;
    DWORD   Characteristics;                       //該節的屬性(比如是否可讀,是否可寫...)
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

(三).遍歷節表:

    通過循環遍歷notepad.exe中的節表,節的數量為標準PE頭中NumberOfSections的值,代碼如下:

    section.h:

void OutputSections(void* buffer)
{
	void* buf = buffer;
	IMAGE_DOS_HEADER* pdos = (IMAGE_DOS_HEADER*)buf;
	IMAGE_FILE_HEADER* pfile = (IMAGE_FILE_HEADER*)((unsigned char*)buf + pdos->e_lfanew + 0x4);
	//定位節表在文件緩沖中的位置
	IMAGE_SECTION_HEADER* psec = (IMAGE_SECTION_HEADER*)((unsigned char*)buf + pdos->e_lfanew + 0x4 + 0x14 + pfile->SizeOfOptionalHeader);
	
	//遍歷節表
	for(int sec_num = 1; sec_num <= pfile->NumberOfSections; sec_num++)
	{
		printf("\nSection%d: %s\n", sec_num, psec->Name);
		printf("Misc:			%#X\n", psec->Misc);
		printf("VirtualAddress:		%#X\n", psec->VirtualAddress);
		printf("SizeOfRawData:		%#X\n", psec->SizeOfRawData);
		printf("PointToRawData:		%#X\n", psec->PointerToRawData);
		printf("Charactoeristcs:	%#X\n", psec->Characteristics);
		psec++;
	}
}

    注釋掉解析其他頭的函數,運行結果如下圖:

    win32下PE文件分析之節表


(四).說明:

    上面的代碼中只輸出了部分信息,主要是一些比較有用的信息.

    節表中最后一個成員的值Characteristics,決定了這個節的權限.下圖是其屬性的對照表:

win32下PE文件分析之節表    

有空會繼續更新.有任何建議請留評論.

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

慈利县| 永城市| 永济市| 邛崃市| 徐水县| 清水河县| 安顺市| 虞城县| 台州市| 江川县| 柏乡县| 磐安县| 古蔺县| 关岭| 曲周县| 洪泽县| 睢宁县| 罗山县| 祁东县| 洪雅县| 保康县| 兴城市| 河东区| 堆龙德庆县| 延川县| 佛山市| 平阳县| 海淀区| 永德县| 五常市| 夏河县| 江永县| 秦安县| 惠安县| 米林县| 金湖县| 赤水市| 鹤岗市| 惠州市| 罗平县| 边坝县|