PrintNTHearder proc ntH:IMAGE_NT_HEADERS32
local num:DWORD
invoke StdOut,addr nextline
invoke StdOut,addr nextline
invoke wsprintf,addr info,CTXT("*************************[----PE文件头----]*************************",13,10)
invoke StdOut,addr info
invoke StdOut,addr nextline
invoke StdOut,addr nextline
invoke wsprintf,addr info,CTXT("PE文件标识:%04x",13,10),ntH.Signature
invoke StdOut,addr info
invoke StdOut,addr nextline
invoke StdOut,addr nextline
invoke wsprintf,addr info,CTXT("*************************IMAGE_FILE_HEADER结构*************************",13,10)
invoke StdOut,addr info
invoke StdOut,addr nextline
invoke StdOut,addr nextline
invoke wsprintf,addr info,CTXT("运行平台 Machine:%04x",13,10),ntH.FileHeader.Machine
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("文件的节数目 NumberOfSections::%08x",13,10),ntH.FileHeader.NumberOfSections
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("文件创建日期和时间 TimeDateStamp:%08x",13,10),ntH.Signature
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("指向符号表(用于调试) PointerToSymbolTable:%08x",13,10),ntH.FileHeader.PointerToSymbolTable
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("符号表中的符号数量(用于调试) NumberOfSymbols:%08x",13,10),ntH.FileHeader.NumberOfSymbols
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("IMAGE_OPTIONAL_HEADER32结构的长度 SizeOfOptionalHeader:%04x ",13,10),ntH.FileHeader.SizeOfOptionalHeader
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("文件属性 Characteristics:%04x",13,10),ntH.FileHeader
invoke StdOut,addr info
invoke StdOut,addr nextline
invoke StdOut,addr nextline
invoke wsprintf,addr info,CTXT("**************IMAGE_OPTIONAL_HEADER32结构**************",13,10)
invoke StdOut,addr info
invoke StdOut,addr nextline
invoke StdOut,addr nextline
invoke wsprintf,addr info,CTXT("ROMImage,exeImage Magic:%04x",13,10),ntH.OptionalHeader.Magic
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("链接器版本号 MajorLinkerVersion:%08x",13,10),ntH. OptionalHeader.MajorLinkerVersion
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("MinorLinkerVersion:%08x ",13,10),ntH. OptionalHeader.MinorLinkerVersion
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("所有含代码的节的总大小 SizeOfCode:%08x",13,10),ntH.OptionalHeader.SizeOfCode
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("所有含已初始化数据的节的总大小 SizeOfInitializedData:%08x ",13,10),ntH.OptionalHeader.SizeOfInitializedData
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("所有含未初始化数据的节的大小 SizeOfUninitializedData:%08x ",13,10),ntH.OptionalHeader.SizeOfUninitializedData
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("程序执行入口RVA AddressOfEntryPoint:%08x",13,10),ntH.OptionalHeader.AddressOfEntryPoint
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("代码的节的起始RVA BaseOfCode:%08x",13,10),ntH.OptionalHeader.BaseOfCode
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("数据的节的起始RVA BaseOfData:%08x",13,10),ntH.OptionalHeader.BaseOfData
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("程序的建议装载地址 ImageBase:%08x",13,10),ntH.OptionalHeader.ImageBase
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("内存中的节的对齐粒度 SectionAlignment:%08x",13,10),ntH.OptionalHeader.SectionAlignment
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("文件中的节的对齐粒度 FileAlignment:%08x",13,10),ntH. OptionalHeader.FileAlignment
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT(" 操作系统主版本号 MajorOperatingSystemVersion:%04x",13,10),ntH.OptionalHeader.MajorOperatingSystemVersion
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("操作系统副版本号 MinorOperatingSystemVersion:%04x",13,10),ntH.OptionalHeader.MinorOperatingSystemVersion
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT(":可运行于操作系统的最小版本号 MajorImageVersion:%04x",13,10),ntH.OptionalHeader.MajorImageVersion
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("MinorImageVersion:%04x",13,10),ntH.OptionalHeader.MinorImageVersion
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("可运行于操作系统的最小子版本号 MajorSubsystemVersion:%04x",13,10),ntH.OptionalHeader.MajorSubsystemVersion
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("MinorSubsystemVersion:%04x",13,10),ntH. OptionalHeader.MinorSubsystemVersion
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("未用 Win32VersionValue:%08x",13,10),ntH.OptionalHeader.Win32VersionValue
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("内存中整个PE映像尺寸 SizeOfImage:%08x",13,10),ntH.OptionalHeader.SizeOfImage
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("所有头+节表的大小 SizeOfHeaders:%08x",13,10),ntH.OptionalHeader.SizeOfHeaders
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("校检码CheckSum:%08x :%04x",13,10),ntH. OptionalHeader.CheckSum
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("文件的子系统 Subsystem:%08x",13,10),ntH.OptionalHeader.Subsystem
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("DllCharacteristics:%04x",13,10),ntH.OptionalHeader.DllCharacteristics
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("初始化时的堆栈大小 SizeOfStackReserve:%08x ",13,10),ntH.OptionalHeader.SizeOfStackReserve
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("初始化时实际提交的堆栈大小 SizeOfStackCommit:%08x",13,10),ntH.OptionalHeader.SizeOfStackCommit
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("初始化时保留的堆大小 SizeOfHeapReserve:%08x",13,10),ntH.OptionalHeader.SizeOfHeapReserve
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("初始化时实际提交的堆大小 SizeOfHeapCommit:%08x",13,10),ntH.OptionalHeader.SizeOfHeapCommit
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("未用 LoaderFlags:%08x ",13,10),ntH. OptionalHeader.LoaderFlags
invoke StdOut,addr info
invoke wsprintf,addr info,CTXT("下面的数据目录结构的数量 NumberOfRvaAndSizes:%08x ",13,10),ntH.OptionalHeader.NumberOfRvaAndSizes
invoke StdOut,addr info
mov num,0
.while num< 16
lea eax, ntH.OptionalHeader.DataDirectory.VirtualAddress
imul ecx,num,8
add eax,ecx
mov ebx,[eax]
invoke wsprintf,addr info,CTXT("IMAGE_DATA_DIRECTORY [%02d]. DataDirectory.VirtualAddress:%08x ",13,10),num,ebx
invoke StdOut,addr info
lea eax, ntH.OptionalHeader.DataDirectory.isize
imul ecx,num,8
add eax,ecx
mov ebx,[eax]
invoke wsprintf,addr info,CTXT("IMAGE_DATA_DIRECTORY [%02d]. DataDirectory.isize: %08x",13,10),num,ebx
invoke StdOut,addr info
inc num
.endw
ret
PrintNTHearder endp