PE結構-合併節(附例項程式碼)
合併節:
1、拉伸到記憶體
2、將第一個節的記憶體大小、檔案大小改成一樣
Max = SizeOfRawData>VirtualSize?SizeOfRawData:VirtualSize
SizeOfRawData = VirtualSize = 最後一個節的VirtualAddress + Max - SizeOfHeaders記憶體對齊後的大小
3、將第一個節的屬性改為包含所有節的屬性 (重點)
4、修改節的數量為1
BOOL MergingSection(IN OUT LPVOID* pImageBuffer)
{
//DOC頭
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)*pImageBuffer;
//NT頭
PIMAGE_NT_HEADERS pNTHeader = (PIMAGE_NT_HEADERS)((DWORD)pDosHeader + pDosHeader->e_lfanew);
//標準PE頭
PIMAGE_FILE_HEADER pPEHeader = (PIMAGE_FILE_HEADER)(((DWORD)pNTHeader) + 4);
//可選PE頭
PIMAGE_OPTIONAL_HEADER32 pOptionHeader = (PIMAGE_OPTIONAL_HEADER32)((DWORD)pPEHeader + IMAGE_SIZEOF_FILE_HEADER);
if (*((PWORD)*pImageBuffer) != IMAGE_DOS_SIGNATURE)
{
printf("MZ檔案標誌頭不存在!");
free(pImageBuffer);
return false;
}
PIMAGE_SECTION_HEADER pSectionHeader = NULL;
pSectionHeader = (PIMAGE_SECTION_HEADER)((DWORD)pOptionHeader + pPEHeader->SizeOfOptionalHeader);
DWORD Max = pSectionHeader->SizeOfRawData > pSectionHeader->Misc.VirtualSize ? pSectionHeader->SizeOfRawData : pSectionHeader->Misc.VirtualSize;
PIMAGE_SECTION_HEADER pSectionHeader_tmp = pSectionHeader;
pSectionHeader_tmp += (pPEHeader->NumberOfSections - 1);
pSectionHeader->SizeOfRawData = pSectionHeader->Misc.VirtualSize = Align(pSectionHeader_tmp->VirtualAddress + Max - pOptionHeader->SizeOfHeaders, pOptionHeader->SectionAlignment);
pPEHeader->NumberOfSections = 1;
return true;
}
Github地址:https://github.com/vShellCode/Analysis-of-PE-structure
相關文章
- td單元格合併程式碼例項
- jQuery合併兩個陣列程式碼例項jQuery陣列
- js合併兩個陣列程式碼例項JS陣列
- javascript 物件合併程式碼例項簡單分析JavaScript物件
- 表格實現標題合併程式碼例項
- table表格單元格合併程式碼例項
- css合併減少重複程式碼簡單例項CSS單例
- javascript實現的合併兩個陣列程式碼例項JavaScript陣列
- table表格單元格橫向和屬性合併程式碼例項
- 結合例項學習|字元編碼和解碼字元
- angularJS結合canvas實現的畫圖程式碼例項AngularJSCanvas
- JavaScript陣列合並程式碼例項JavaScript陣列
- 原生js刪除節點程式碼例項JS
- javascript函式節流程式碼例項分享JavaScript函式
- JavaScript刪除元素節點程式碼例項JavaScript
- Oracle例項的程式結構和記憶體結構Oracle記憶體
- ORACLE例項的程式結構和記憶體結構(轉)Oracle記憶體
- jQuery結合ul和li實現的下拉選單例項程式碼jQuery單例
- PE結構分析(二)
- 基礎知識1——例項程式結構
- shell script程式設計小結——附帶例項程式設計
- Vue-TypeScript全面教程(附例項程式碼和一鍵構建工具)VueTypeScript
- es6陣列合並程式碼例項陣列
- 檔案合併新思路(附完整DELPHI程式碼) (轉)
- PHP 圖片的合併,微信小程式碼合併,文字合併PHP微信小程式
- 點選連結不跳轉例項程式碼
- js動態連結<a>元素程式碼例項JS
- 雙連結串列插入排序例項程式碼排序
- PE 檔案結構圖
- 使用jQuery刪除一個元素節點程式碼例項jQuery
- jquery獲取指定元素的父節點程式碼例項jQuery
- 閉包用法結合例項詳解
- jQuery is() 程式碼例項jQuery
- STL原始碼之rotate函式結合圖和例項分析原始碼函式
- JDK 7 新特性小結(包含例項程式碼)JDK
- js模擬點選連結程式碼例項JS
- 去掉連結a的虛線框程式碼例項
- PE檔案結構複習