view pe header on winhex

来源:互联网 发布:ubuntu 16.04 syslog 编辑:程序博客网 时间:2024/06/03 12:30

前言

在WinHex打开PE文件后, 总是忘记PE结构成员的含义, 直接看蒙了.
整理了一张带标记的图片, 做PE结构识别练习.
练习通过后, 再拿一个正常的没有标记的PE文件在WinHex中直接看.

实验

这里写图片描述
DOS_HEADER共4行
DOS_HEADER + 0x0, WORD => DOS文件签名
DOS_HEADER + 0x3c, DWORD => NT头偏移

NT_HEADER + 0x0, DWORD => PE文件签名

FILE_HEADER + 0x0, WORD => 机器类型 14c = I386
FILE_HEADER + 0x2, WORD => 扇区数量 = 1, 只有.text
FILE_HEADER + 0x4, DWORD => 时间戳
FILE_HEADER + 0x8, DWORD => 调试符号地址
FILE_HEADER + 0xc, DWORD => 调试符号数量
FILE_HEADER + 0x10, WORD => 可选头size
FILE_HEADER + 0x12, WORD => PE属性(e.g. 是否有调试符号,行号信息)

OPTION_HEADER + 0x0, WORD => 可选头类型, 10b => OPTION_HEADERx86
OPTION_HEADER + 0x2, BYTE*2 => 连接器主副版本
OPTION_HEADER + 0x4, DWORD => 代码size
OPTION_HEADER + 0x8, DWORD => 已初始化数据size
OPTION_HEADER + 0xc, DWORD => 未初始化数据size
OPTION_HEADER + 0x10, DWORD => 程序入口点EP
OPTION_HEADER + 0x14, DWORD => 代码基地址
OPTION_HEADER + 0x18, DWORD => 数据基地址
OPTION_HEADER + 0x1C, DWORD => 建议装载地址
OPTION_HEADER + 0x20, DWORD => 内存对齐值
OPTION_HEADER + 0x24, DWORD => 文件对齐值
OPTION_HEADER + 0x28, WORD*2 => 主系统主副版本号
OPTION_HEADER + 0x2C, WORD*2 => 映像主副版本号
OPTION_HEADER + 0x30, WORD*2 => 子系统主副版本号
OPTION_HEADER + 0x34, DWORD => WIN32版本号
OPTION_HEADER + 0x38, DWORD => 内存中的映像size
OPTION_HEADER + 0x3C, DWORD => Header size
OPTION_HEADER + 0x40, DWORD => 校验和
OPTION_HEADER + 0x44, WORD => 子系统
OPTION_HEADER + 0x46, WORD => PE是否为DLL
OPTION_HEADER + 0x48, DWORD => 栈保留空间
OPTION_HEADER + 0x4C, DWORD => 栈提交空间
OPTION_HEADER + 0x50, DWORD => 堆保留空间
OPTION_HEADER + 0x54, DWORD => 堆提交空间
OPTION_HEADER + 0x58, DWORD => 载入器标志
OPTION_HEADER + 0x5C, DWORD => 数据目录元素个数
OPTION_HEADER + 0x60, DWORD*2 => 数据目录[0]
OPTION_HEADER + 0x68, DWORD*2 => 数据目录[1]
OPTION_HEADER + 0x70, DWORD*2 => 数据目录[2]
OPTION_HEADER + 0x78, DWORD*2 => 数据目录[3]
OPTION_HEADER + 0x80, DWORD*2 => 数据目录[4]
OPTION_HEADER + 0x88, DWORD*2 => 数据目录[5]
OPTION_HEADER + 0x90, DWORD*2 => 数据目录[6]
OPTION_HEADER + 0x98, DWORD*2 => 数据目录[7]
OPTION_HEADER + 0xa0, DWORD*2 => 数据目录[8]
OPTION_HEADER + 0xa8, DWORD*2 => 数据目录[9]
OPTION_HEADER + 0xb0, DWORD*2 => 数据目录[10]
OPTION_HEADER + 0xb8, DWORD*2 => 数据目录[11]
OPTION_HEADER + 0xc0, DWORD*2 => 数据目录[12]
OPTION_HEADER + 0xc8, DWORD*2 => 数据目录[13]
OPTION_HEADER + 0xd0, DWORD*2 => 数据目录[14]
OPTION_HEADER + 0xd8, DWORD*2 => 数据目录[15]
// 可选头结束了
现在我能将NT头和可选头都认出来了,就是有点慢. 估计熟练之后,就好了.
今天解决了能与不能的问题.
这里写图片描述

0 0
原创粉丝点击