免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
PE文件格式--------------基本結(jié)構(gòu)信息
一)win32下PE文件格式的文件有:*.exe;*.dll;*.scr;*.fon;*.drv;*.sys
二)pe文件基本結(jié)構(gòu)
附加數(shù)據(jù)
其它節(jié)區(qū)
.reloc節(jié)區(qū)
.rsrc節(jié)區(qū)
.data節(jié)區(qū)
.text節(jié)區(qū)
節(jié)表
數(shù)據(jù)目錄
選項(xiàng)頭
文件頭
PE標(biāo)志
DOS stub
DOS頭
格式說明:
1)dos頭:
0000 0000:4D 5A
0000 0010:
0000 0020:
0000 0030:                                                3C xx xx xx
IMAGE_DOS_HEADER struc
+00h e_magic:          word ;dos標(biāo)志MZ,常量表示IMAGE_DOS_SIGNATURE
...
+3ch e_lfanew:         dword;指向pe文件頭
IMAGE_DOS_HEADER ends
2)dos stub
在dos執(zhí)行的程序代碼。方法是
3)pe文件頭
定位:文件開始地址+IMAGE_DOS_HEADER.e_lfanew
數(shù)據(jù)結(jié)構(gòu):
IMAGE_NT_HEADER struc
+00h Signature:         dword ;pe標(biāo)志50 45 00 00,IMAGE_NT_SIGNATURE
+04h FileHead:            IMAGE_FILE_HEADER
+18h OptionalHead:     IMAGE_OPTIONAL_HEADER32
IMAGE_NT_HEADER ends
4)pe標(biāo)志
0000 0D00: 50 45 00 00
+00h Signature:    dword           ;PE標(biāo)志,常量表示IMAGE_NT_SIGNATURE
5)文件頭
0000 0D00: 50 45 00 00 04 xx 06 xx  08 xx xx xx
0000 0D10:                   14 xx 16 xx
數(shù)據(jù)結(jié)構(gòu):
IMAGE_FILE_HEADER struc
+04h Machine:                    word           ;運(yùn)行平臺
+06h NumberOfSections:     word           ;節(jié)區(qū)數(shù)量
+08h TimeDateStamp:         dword         ;從1969年12月31日下午4點(diǎn)以來的秒數(shù)
...
+14h SizeOfOptionalHeader: word            ;選項(xiàng)頭大小
+16h Characteristics:           word            ;文件屬性,exe為      dll為多少等
IMAGE_FILE_HEADER ends
6)選項(xiàng)頭
0000 0D00: 50 45 00 00 04 xx 06 xx  08 xx xx xx
0000 0D10:                   14 xx 16 xx
0000 0D20:                                       28 xx xx xx
0000 0D30:                   34 xx xx xx   38 xx xx xx  3C xx xx xx
0000 0D40:
0000 0D50:   50 xx xx xx 54 xx xx xx                    5C xx xx xx
0000 0D60:
0000 0D70:                                        78 xx xx xx  xx xx xx xx
數(shù)據(jù)結(jié)構(gòu):
IMAGE_OPTIONAL_HEADER32 struc
+28h AddressOfEntryPoint:  dword              ;入口地址
+34h ImageBase:                dword              ;建議裝載地址
+38h SectionAlignMent:       dword               ;內(nèi)存對齊大小
+3ch FileAlignMent:              dword               ;文件對齊大小
+50h SizeOfImage               dword                ;文件裝入到內(nèi)存后的總尺寸,即內(nèi)存對齊后的總大小
+54h SizeOfHeaders            dword                ;所有頭 + 區(qū)塊表的尺寸大小
+5ch SubSystem:                wrod               ;子系統(tǒng)
+78h DataDirectory:             IMAGE_DATA_DIRECTORY ;數(shù)據(jù)目錄
IMAGE_OPTIONAL_HEADER32 ends
界面子系統(tǒng)的取值和含義
取   值
Windows.inc中的預(yù)定義值
含   義
0
IMAGE_SUBSYSTEM_UNKNOWN
未知的子系統(tǒng)
1
IMAGE_SUBSYSTEM_NATIVE
不需要子系統(tǒng)(如驅(qū)動程序)
2
IMAGE_SUBSYSTEM_WINDOWS_GUI
Windows圖形界面
3
IMAGE_SUBSYSTEM_WINDOWS_CUI
Windows控制臺界面
5
IMAGE_SUBSYSTEM_OS2_CUI
OS2控制臺界面
7
IMAGE_SUBSYSTEM_POSIX_CUI
POSIX控制臺界面
8
IMAGE_SUBSYSTEM_NATIVE_WINDOWS
不需要子系統(tǒng)
9
IMAGE_SUBSYSTEM_WINDOWS_CE_GUI
Windows CE圖形界面
7)數(shù)據(jù)目錄
IMAGE_DATA_DIRECTORY struc
VirtualAddress:               dword               ;RVA起始地址
VirtualSize:                     dword               ;數(shù)據(jù)塊大小
IMAGE_DATA_DIRECTORY ends
數(shù)據(jù)目錄列表的含義
索   引
索引值在Windows.inc中的預(yù)定義值
對應(yīng)的數(shù)據(jù)塊
0
IMAGE_DIRECTORY_ENTRY_EXPORT
導(dǎo)出表
1
IMAGE_DIRECTORY_ENTRY_IMPORT
導(dǎo)入表
2
IMAGE_DIRECTORY_ENTRY_RESOURCE
資源
3
IMAGE_DIRECTORY_ENTRY_EXCEPTION
異常(具體資料不詳)
4
IMAGE_DIRECTORY_ENTRY_SECURITY
安全(具體資料不詳)
5
IMAGE_DIRECTORY_ENTRY_BASERELOC
重定位表
6
IMAGE_DIRECTORY_ENTRY_DEBUG
調(diào)試信息
7
IMAGE_DIRECTORY_ENTRY_ARCHITECTURE
版權(quán)信息
8
IMAGE_DIRECTORY_ENTRY_GLOBALPTR
具體資料不詳
9
IMAGE_DIRECTORY_ENTRY_TLS
Thread Local Storage
10
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG
具體資料不詳
11
IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT
具體資料不詳
12
IMAGE_DIRECTORY_ENTRY_IAT
導(dǎo)入函數(shù)地址表
13
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT
具體資料不詳
14
IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR
具體資料不詳
15
未使用
8)節(jié)表
多個IMAGE_SECTION_HEADER組成節(jié)表。節(jié)表位置:緊接在PE頭后面。
IMAGE_SECTION_HEADER struc
+00h Name1:                  db                      ;節(jié)名,占8字節(jié),以ASSII碼表示,不一定以0結(jié)束
+08h VirtualSize:             dd                      ;沒有做內(nèi)存對齊處理的大小
+0ch VirtualAddress:             dd                 ;RVA
+10h SizeOfRawData:                dd                 ;文件對齊后的大小
+14h PointerToRawData:           dd                  ;文件偏移
+18h PointerToRelocations:         dd
+1ch PointerToLinenumbers:       dd
+20h NumberOfRelocations:       dw
+22h NumberOfLinenumbers:     dw
+24h Characteristics:             dd                  ;節(jié)屬性,加載時(shí)用該屬性去設(shè)置內(nèi)存頁屬性
IMAGE_SECTION_HEADER ends
注意:上面的偏移是針對本結(jié)構(gòu)的偏移量。
加載程序根據(jù)此機(jī)構(gòu)加載相應(yīng)的節(jié)塊。
字段值用 途
00000020h包含代碼,常與10000000h一起設(shè)置
00000040h包含已初始化數(shù)據(jù)
00000080h包含未初始化數(shù)據(jù)
02000000h可以被丟棄
10000000h共享塊
20000000h可執(zhí)行
40000000h可讀
80000000h可寫
附代碼:顯示pe文件頭信息和節(jié)表信息
文件分為3部分:
peinfo.rc:對話框資源文件
peinfo.asm:界面顯示處理
processpefile.asm:提取pe文件頭信息和節(jié)表信息
資源文件peinfo.rc
#include <resource.h>
#define ICO_MAIN  1000
#define DLG_MAIN  2000
#define IDC_INFO  2001
#define IDM_MAIN  3000
#define IDM_OPEN  3001
#define IDM_EXIT  3002
ICO_MAIN  ICON  "peinfo.ico"
DLG_MAIN  dialog 100, 100, 450, 340
style DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
caption "pe文件基本信息"
menu IDM_MAIN
font 9, "宋體"
{
CONTROL "", IDC_INFO, "RichEdit20A", 196 | ES_WANTRETURN | WS_CHILD | ES_READONLY
| WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_TABSTOP, 0, 0, 449, 340
}
IDM_MAIN menu discardable
begin
popup "文件(&F)"
begin
menuitem "打開文件(&O)...", IDM_OPEN
menuitem separator
menuitem "退出(&X)", IDM_EXIT
end
end
界面顯示peinfo.asm
;=======================
;查看pe文件基本信息
;by 紫陌
;=======================
.386
.model flat, stdcall
option casemap:none
;=======================
;include頭文件
;=======================
include windows.inc
include user32.inc
include kernel32.inc
include comdlg32.inc
includelib user32.lib
includelib kernel32.lib
includelib comdlg32.lib
;=======================
;equ等值定義
;=======================
ICO_MAIN  equ 1000
DLG_MAIN  equ 2000
IDC_INFO  equ 2001
IDM_MAIN  equ 3000
IDM_OPEN  equ 3001
IDM_EXIT  equ 3002
;=======================
;數(shù)據(jù)段
;=======================
.data?
hInstance   dd ?
hRichEdit   dd ?
hMainWnd    dd ?
szFileName   db MAX_PATH dup (?)
lpImageBase   dd ?
szShowMsg   db 1024 dup(?)
.const
szDllEdit  db 'RichEd20.dll', 0
szFont   db '宋體', 0
szExtPe   db 'PE文件', 0, '*.exe;*.dll;*.scr;*.fon;*.drv;*.sys', 0
db '所有文件', 0, '*.*', 0, 0
szErrOpen  db '打開文件失敗', 0
szErrCreateMap db '創(chuàng)建文件映射失敗', 0
szErrMap   db '映射文件失敗', 0
szErrFormat  db '無效的pe文件', 0
szErrExp   db '異常發(fā)生地址:%08X,異常代碼:%08X,標(biāo)志:%08X', 0
;=======================
;代碼段
;=======================
.code
include processpefile.asm
;異常處理SEH
;---------------
_handler proc C _lpExceptionRecord, _lpSeh, _lpContext, _lpDispatcher
local @szBuf[256]:BYTE
pushad
mov esi, _lpExceptionRecord
mov edi, _lpContext
assume esi:ptr EXCEPTION_RECORD, edi:ptr CONTEXT
invoke wsprintf, addr @szBuf, addr szErrExp, [edi].regEip, [esi].ExceptionCode, [esi].ExceptionFlags
invoke MessageBox, NULL, addr @szBuf, NULL, MB_ICONSTOP
;**************************
;恢復(fù)寄存器
;**************************
mov eax, _lpSeh
push DWORD ptr [eax + 0ch]
pop [edi].regEbp
push DWORD ptr [eax + 8]
pop [edi].regEip
push eax
pop [edi].regEsp
assume esi:nothing, edi:nothing
popad
mov eax, ExceptionContinueExecution
ret
_handler endp
;---------------
;初始化程序
;---------------
_Init proc
local @stCF:CHARFORMAT
pushad
;*****************
;圖標(biāo)
;*****************
invoke LoadIcon, hInstance, ICO_MAIN
invoke SendMessage, hMainWnd, WM_SETICON, ICON_BIG, eax
;*****************
;richedit控件句柄
;*****************
invoke GetDlgItem, hMainWnd, IDC_INFO
mov hRichEdit, eax
;*****************
;初始化richedit
;*****************
invoke SendMessage, hMainWnd, EM_SETTEXTMODE, TM_PLAINTEXT, 0
mov @stCF.cbSize, sizeof CHARFORMAT
mov @stCF.dwMask, CFM_FACE or CFM_SIZE or CFM_BOLD
mov @stCF.yHeight, 9 * 20
invoke lstrcpy, addr @stCF.szFaceName, addr szFont
invoke SendMessage, hMainWnd, EM_SETCHARFORMAT, 0, addr @stCF
invoke SendMessage, hMainWnd, EM_EXLIMITTEXT, 0, -1
popad
ret
_Init endp
;---------------
;打開對話框子程序
;---------------
_OpenFile proc
local @stOF:OPENFILENAME
local @hFile
local @hMap
pushad
;*****************
;文件打開對話框
;*****************
invoke RtlZeroMemory, addr @stOF, sizeof OPENFILENAME
mov @stOF.lStructSize, sizeof OPENFILENAME
push hMainWnd
pop @stOF.hwndOwner
mov @stOF.lpstrFilter, offset szExtPe
mov @stOF.lpstrFile, offset szFileName
mov @stOF.nMaxFile, MAX_PATH
mov @stOF.Flags, OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST
invoke GetOpenFileName, addr @stOF
.if !eax
jmp _overpos
.endif
;*******************
;打開文件并建立map
;*******************
invoke CreateFile, addr szFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
.if eax == INVALID_HANDLE_VALUE
invoke MessageBox, NULL, szErrOpen, NULL, MB_ICONSTOP
jmp _overpos
.endif
mov @hFile, eax
invoke CreateFileMapping, @hFile, NULL, PAGE_READONLY, 0, 0, NULL
.if !eax
invoke MessageBox, NULL, addr szErrCreateMap, NULL, MB_ICONSTOP
invoke CloseHandle, @hFile
jmp _overpos
.endif
mov @hMap, eax
invoke MapViewOfFile, @hMap, FILE_MAP_READ, 0, 0, 0
.if !eax
invoke MessageBox, NULL, addr szErrMap, NULL, MB_ICONSTOP
invoke CloseHandle, @hFile
jmp _overpos
.endif
mov lpImageBase, eax
;********************
;seh結(jié)構(gòu)異常處理
;********************
push ebp
push offset _errexit
push offset _handler
assume fs:nothing
push fs:[0]
mov fs:[0], esp
;********************
;檢查PE文件是否有效
;********************
mov esi, lpImageBase
assume esi:ptr IMAGE_DOS_HEADER
.if [esi].e_magic != IMAGE_DOS_SIGNATURE
jmp _errformat
.endif
add esi, [esi].e_lfanew
assume esi:ptr IMAGE_NT_HEADERS
.if [esi].Signature != IMAGE_NT_SIGNATURE
jmp _errformat
.endif
invoke _ProcessPeFile, lpImageBase
jmp _errexit
_errformat:
invoke MessageBox, NULL, addr szErrFormat, NULL, MB_ICONSTOP
_errexit:
pop fs:[0]
add esp, 0ch
;*********************
;關(guān)閉映射,句柄
;*********************
invoke CloseHandle, @hFile
invoke CloseHandle, @hMap
invoke UnmapViewOfFile, lpImageBase
_overpos:
popad
ret
_OpenFile endp
;---------------
;對話框結(jié)束子程序
;---------------
_EndDlgProc proc _lphWnd
pushad
invoke EndDialog, _lphWnd, 0
popad
ret
_EndDlgProc endp
;--------------
;主窗口程序
;--------------
_MainDlgProc proc uses ebx esi edi hWnd, uMsg, wParam, lParam
local @hMainIco
mov eax, uMsg
.if eax == WM_CLOSE
invoke _EndDlgProc, hWnd
.elseif eax == WM_INITDIALOG
push hWnd
pop hMainWnd
call _Init
.elseif eax == WM_COMMAND
mov eax, wParam
.if ax == IDM_EXIT
invoke _EndDlgProc, hWnd
.elseif ax == IDM_OPEN
call _OpenFile
.endif
.else
mov eax, FALSE
ret
.endif
mov eax, TRUE
ret
_MainDlgProc endp
;---------------------
;主程序
;---------------------
_Main proc
invoke LoadLibrary, addr szDllEdit
mov hRichEdit, eax
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke DialogBoxParam, hInstance, DLG_MAIN, NULL, _MainDlgProc, 0
invoke FreeLibrary, hRichEdit
ret
_Main endp
start:
call _Main
invoke ExitProcess, 0
end start
提取pe文件信息processpefile.asm
;=========================
;pe處理文件
;=========================
;=======================
;數(shù)據(jù)段
;=======================
.const
szNTHead   db '文件名:%s', 0dh, 0ah
db '------------------------------------------', 0dh, 0ah
db '運(yùn)行平臺:%04X', 0dh, 0ah
db '節(jié)區(qū)數(shù)量:%04X', 0dh, 0ah
db '創(chuàng)建時(shí)間:%08X', 0dh, 0ah
db '選項(xiàng)頭大小:%04X', 0dh, 0ah
db '文件屬性:%04X', 0dh, 0ah
db '入口地址:%08X', 0dh, 0ah
db '建議裝載地址:%08X', 0dh, 0ah
db '內(nèi)存對齊粒度:%08X', 0dh, 0ah
db '文件對齊粒度:%08X', 0dh, 0ah
db '子系統(tǒng):%08X', 0dh, 0ah, 0
szSectionCap   db '名稱     VirtualSize      VirtualAddress     SizeOfRawData       PointOfRawData         屬性', 0dh, 0ah, 0
szSectionData db '%s       %08X          %08X           %08X          %08X           %08X', 0dh, 0ah, 0
;=======================
;代碼段
;=======================
.code
_ProcessPeFile proc _lpImageBase
local @szBuf[512]:BYTE
local @Machine:DWORD
local @NumberOfSections:DWORD
local @SizeOfOptionalHeader:DWORD
local @Characteristics:DWORD
local @Subsystem:DWORD
local @SectionName[9]:BYTE
pushad
;***************
;edi指向pe頭,提取并顯示文件頭信息
;***************
mov edi, _lpImageBase
assume edi:ptr IMAGE_DOS_HEADER
add edi, [edi].e_lfanew
assume edi:ptr IMAGE_NT_HEADERS
movzx eax, [edi].FileHeader.Machine
mov @Machine, eax
movzx eax, [edi].FileHeader.NumberOfSections
mov @NumberOfSections, eax
movzx eax, [edi].FileHeader.SizeOfOptionalHeader
mov @SizeOfOptionalHeader, eax
movzx eax, [edi].FileHeader.Characteristics
mov @Characteristics, eax
movzx eax, [edi].OptionalHeader.Subsystem
mov @Subsystem, eax
invoke wsprintf, addr @szBuf, addr szNTHead, \
addr szFileName, \
@Machine, \
@NumberOfSections, \
[edi].FileHeader.TimeDateStamp, \
@SizeOfOptionalHeader, \
@Characteristics, \
[edi].OptionalHeader.AddressOfEntryPoint, \
[edi].OptionalHeader.ImageBase, \
[edi].OptionalHeader.SectionAlignment, \
[edi].OptionalHeader.FileAlignment, \
@Subsystem
invoke RtlZeroMemory, addr szShowMsg, sizeof szShowMsg
invoke lstrcat, addr szShowMsg, addr @szBuf
invoke SetWindowText, hRichEdit, addr szShowMsg
;********************
;節(jié)表信息
;********************
invoke lstrcat, addr szShowMsg, addr szSectionCap
invoke SetWindowText, hRichEdit, addr szShowMsg
add edi, 4
add edi, sizeof IMAGE_FILE_HEADER
add edi, @SizeOfOptionalHeader
assume edi:ptr IMAGE_SECTION_HEADER
mov ecx, @NumberOfSections
.repeat
push ecx
push edi
invoke RtlZeroMemory, addr @SectionName, 9
invoke lstrcpyn, addr @SectionName, edi, 8
invoke wsprintf, addr @szBuf, addr szSectionData, \
addr @SectionName, \
[edi].Misc.VirtualSize, \
[edi].VirtualAddress, \
[edi].SizeOfRawData, \
[edi].PointerToRawData, \
[edi].Characteristics
invoke lstrcat, addr szShowMsg, addr @szBuf
invoke SetWindowText, hRichEdit, addr szShowMsg
pop edi
pop ecx
add edi, sizeof IMAGE_SECTION_HEADER
.untilcxz
assume edi:nothing
popad
ret
_ProcessPeFile endp
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
PE教程6: Import Table(引入表)
把我的第一個匯編程序(QQ自動群發(fā)器)源碼與和我一樣初級的編程愛好者共享
WIN32匯編: 31.列表視圖控件
【新提醒】獲取并顯示當(dāng)前內(nèi)存使用情況(支持4G以上內(nèi)存),Win32匯編語言案例解析,典型案例解析(VIP免費(fèi)),魚C論壇
看雪學(xué)院
保護(hù)進(jìn)程,進(jìn)程關(guān)閉關(guān)機(jī)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服