好友
阅读权限25
听众
最后登录1970-1-1
|
本帖最后由 Anonymous、 于 2014-3-19 15:57 编辑
第一次发帖,请多多指教,最近在学PE格式,就整理了一份资料..........
第二篇帖子,实践哦!!!!!
http://www.52pojie.cn/thread-245213-1-1.html
IMAGE_DOS_HEADER STRUCT
{
+0h WORD e_magic ; MZ签名 'MZ'字符
+2h WORD e_cblp ; 文件长度%512
+4h WORD e_cp ; 文件长度/512
+6h WORD e_crlc ; 重定位项数 重定位表的表项计数
+8h WORD e_cparhdr ; 文件头所需段数 文件头的大小。文件头后面就是指令。
+0ah WORD e_minalloc ; 运行需最小段数
+0ch WORD e_maxalloc ; 运行需最大段数
+0eh WORD e_ss ; 代码的初始化堆栈SS
+10h WORD e_sp ; 代码的初始化堆栈指针SP
+12h WORD e_csum ; 校验和为0
+14h WORD e_ip ; DOS 代码的初始化指令入口[指针IP]
+16h WORD e_cs ; 初始CS
+18h WORD e_lfarlc ; 重定位表位置
+1ah WORD e_ovno ; 覆盖号
+1ch WORD e_res[4] ; 保留字
+24h WORD e_oemid ; OEM标识符
+26h WORD e_oeminfo ; OEM信息
+29h WORD e_res2[10] ; 保留字
+3ch DWORD e_lfanew ; PE文件头偏移,指定了PE文件头的位置
} IMAGE_DOS_HEADER ENDS
IMAGE_NT_HEADERS STRUCT ; NT,即PE文件头
{
+0h DWORD Signature ; PE文件标识
+4h IMAGE_FILE_HEADER FileHeader
{
typedef struct _IMAGE_FILE_HEADER
{
+04h WORD Machine ; 运行平台
+06h WORD NumberOfSections ; 文件的区块数目
+08h DWORD TimeDateStamp ; 文件创建日期和时间
+0Ch DWORD PointerToSymbolTable ; 指向符号表(主要用于调试)
+10h DWORD NumberOfSymbols ; 符号表中符号个数(同上)
+14h WORD SizeOfOptionalHeader ;IMAGE_OPTIONAL_HEADER32 结构大小
+16h WORD Characteristics ; 文件属性
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER
}
+18h IMAGE_OPTIONAL_HEADER32 OptionalHeader
{
typedef struct _IMAGE_OPTIONAL_HEADER
{
+18h WORD Magic ; 标志字, ROM 映像(0107h),普通可执行文件(010Bh)
+1Ah BYTE MajorLinkerVersion ; 链接程序的主版本号
+1Bh BYTE MinorLinkerVersion ; 链接程序的次版本号
+1Ch DWORD SizeOfCode ; 所有含代码的节的总大小
+20h DWORD SizeOfInitializedData ; 所有含已初始化数据的节的总大小
+24h DWORD SizeOfUninitializedData ; 所有含未初始化数据的节的大小
+28h DWORD AddressOfEntryPoint ; 程序执行入口RVA
+2Ch DWORD BaseOfCode ; 代码的区块的起始RVA
+30h DWORD BaseOfData ; 数据的区块的起始RVA
+34h DWORD ImageBase ; 程序的首选装载地址
+38h DWORD SectionAlignment ; 内存中的区块的对齐大小
+3Ch DWORD FileAlignment ; 文件中的区块的对齐大小
+40h WORD MajorOperatingSystemVersion; 要求操作系统最低版本号的主版本号
+42h WORD MinorOperatingSystemVersion; 要求操作系统最低版本号的副版本号
+44h WORD MajorImageVersion ; 可运行于操作系统的主版本号
+46h WORD MinorImageVersion ; 可运行于操作系统的次版本号
+48h WORD MajorSubsystemVersion ; 要求最低子系统版本的主版本号
+4Ah WORD MinorSubsystemVersion ; 要求最低子系统版本的次版本号
+4Ch DWORD Win32VersionValue ; 莫须有字段,不被病毒利用的话一般为0
+50h DWORD SizeOfImage ; 映像装入内存后的总尺寸
+54h DWORD SizeOfHeaders ; 所有头+ 区块表的尺寸大小
+58h DWORD CheckSum ; 映像的校检和
+5Ch WORD Subsystem ; 可执行文件期望的子系统
+5Eh WORD DllCharacteristics ; DllMain()函数何时被调用,默认为0
+60h DWORD SizeOfStackReserve ; 初始化时的栈大小
+64h DWORD SizeOfStackCommit ; 初始化时实际提交的栈大小
+68h DWORD SizeOfHeapReserve ; 初始化时保留的堆大小
+6Ch DWORD SizeOfHeapCommit ; 初始化时实际提交的堆大小
+70h DWORD LoaderFlags ; 与调试有关,默认为0
+74h DWORD NumberOfRvaAndSizes ; 下边数据目录的项数,这个字段自WindowsNT发布以来一直是16
DataDirectory [IMAGE_NUMBEROF_DIRECTORY_ENTRIES] ; 数据目录表,次结构重复16次!!!!!!
{
IMAGE_DATA_DIRECTORY STRUCT
VirtualAddress DWORD ;数据的起始RVA
isize DWORD ;数据块的长度
IMAGE_DATA_DIRECTORY ENDS
}
} IMAGE_OPTIONAL_HEADER32 ENDS
} IMAGE_NT_HEADERS ENDS
}
typedef struct _IMAGE_SECTION_HEADER
{
BYTE Name[IMAGE_SIZEOF_SHORT_NAME] ; 节表名称,如“.text”;IMAGE_SIZEOF_SHORT_NAME=8
union
{
DWORD PhysicalAddress ; 物理地址
DWORD VirtualSize ;真实长度,这两个值是一个联合结构,可以使用其中的任何一个,一般是取后一个
} Misc
DWORD VirtualAddress ; 节区的RVA 地址
DWORD SizeOfRawData ; 在文件中对齐后的尺寸
DWORD PointerToRawData ; 在文件中的偏移量
DWORD PointerToRelocations ; 在OBJ 文件中使用,重定位的偏移
DWORD PointerToLinenumbers ; 行号表的偏移(供调试使用地)
WORD NumberOfRelocations ; 在OBJ 文件中使用,重定位项数目
WORD NumberOfLinenumbers ; 行号表中行号的数目
DWORD Characteristics ; 节属性如可读,可写,可执行等
} IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|