图解用工具对PE文件格式做初步研究

工具:

PETool,MiniHex,PEViewer

以本机notepad.exe为研究对象。本机64位,该notepad.exe是64位应用程序。

1 用peviewer打开

PE文件大体包括四部分,DOS头,NT头,节表以及具体的节。下图展示的是前三部分。


2 DOS头

e_magic:一个WORD类型,值是一个常数0x4D5A,用文本编辑器查看该值位‘MZ’,可执行文件必须都是'MZ'开头。

e_lfanew:为32位可执行文件扩展的域,用来表示DOS头之后的NT头相对文件起始地址的偏移。

看下图左方给出的e_lfanew为0x000000E8,在下图右方找到此地址,如右方000000E0所示行的光标处;

起始四个字节是50 45 00 00,和右图的PE头的Signature相符合;



3 文件头

PE文件头的定义:

typedef struct _IMAGE_FILE_HEADER {  
    WORD    Machine;  
    WORD    NumberOfSections;  
    DWORD   TimeDateStamp;  
    DWORD   PointerToSymbolTable;  
    DWORD   NumberOfSymbols;  
    WORD    SizeOfOptionalHeader;  
    WORD    Characteristics;  
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;  

Machine:该文件的运行平台,是x86、x64还是I64等等,可以是下面值里的某一个。
NumberOfSections:该PE文件中有多少个节,也就是节表中的项数。
TimeDateStamp:PE文件的创建时间,一般有连接器填写。

对照下图左方显示和右方光标处,其内容相符合;







4 导入表

自己算下导入表的起始地址,比较难算;用工具看下,如下图;导入表起始地址是

0x00000178


peviewer给出的导入表内容;


看16进制文件中的00000178,与peviewer给出的似乎不符,不过此处还不太理解;


16进制文件和PETool给出的内容是相符合的;

5 导入表中的函数名

试着找下导入的SetWindowText函数的名字在16进制文件中的位置;


什么是Thunk RVA,对相关计算尚不太熟悉;

直接找到0000D640处看看,不是SetWindowText;


用搜索功能找SetWindowText;在如下位置;这个RVA的计算是比较复杂;以后再搞;



链接

http://www.pediy.com/kssd/tutorial/chap8-1-6.htm
http://blog.csdn.net/evileagle/article/details/11693499

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值