📄 jiurl pe 格式学习总结(一)-- pe文件概述.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0062)http://jiurl.cosoft.org.cn/jiurl/document/jiurlpe/jiurlpe1.htm -->
<HTML><HEAD><TITLE>JIURL's PE 1</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content=黑客,安全,网络,编程,黑客软件,安全软件,hacker,UNIX,Linux,FreeBSD name=keywords>
<META content=黑客,安全,网络,编程,黑客软件,安全软件,hacker,UNIX,Linux,FreeBSD name=description>
<STYLE type=text/css>.title {
FONT-FAMILY: "黑体", Arial, sans-serif; FONT-SIZE: 21px; FONT-WEIGHT: bold; LINE-HEIGHT: 48px; TEXT-DECORATION: none
}
.author {
FONT-FAMILY: "宋体"; FONT-SIZE: 12px; LINE-HEIGHT: 16px
}
.content {
FONT-SIZE: 14px; LINE-HEIGHT: 20px
}
</STYLE>
<META content="MSHTML 5.00.2614.3500" name=GENERATOR></HEAD>
<BODY bgColor=#f7f7f7 topMargin=5>
<DIV align=center>
<CENTER>
<TABLE border=0 cellPadding=0 cellSpacing=0 height=29 width="96%">
<TBODY>
<TR>
<TD class=title height=41 width="100%">
<P align=center><FONT face=宋体><B>JIURL PE 格式学习总结(一)--
PE文件概述</B></FONT></P></TD></TR></CENTER>
<TR>
<TD class=author height=9 width="100%">
<P align=center>作者: <A href="mailto:jiurl@mail.china.com">JIURL</A>
</P></TD></TR>
<TR>
<TD class=author height=6 width="100%">
<P
align=center>
主页: <A href="http://jiurl.yeah.net/">http://jiurl.yeah.net/</A> </P></TD></TR>
<TR>
<TD class=author height=2 width="100%">
<P align=center> 日期: 2003-4-23
</P></TD></TR></TBODY></TABLE></DIV>
<DIV align=center>
<CENTER>
<TABLE border=0 cellPadding=0 cellSpacing=0 height=1 width="96%">
<TBODY>
<TR>
<TD height=1 width="100%">
<HR color=#396da5 SIZE=3>
</TD></TR></TBODY></TABLE></CENTER></DIV>
<DIV align=center>
<TABLE border=0 cellPadding=0 cellSpacing=0 class=content height=3194
width="96%">
<TBODY>
<TR>
<TD height=5500 vAlign=top width="131%"><B>零 前言</B>
<P> PE格式,是Windows的可执行文件的格式。Windows中的
exe文件,dll文件,都是PE格式。PE 就是Portable Executable 的缩写。Portable
是指对于不同的Windows版本和不同的CPU类型上PE文件的格式是一样的,当然CPU不一样了,CPU指令的二进制编码是不一样的。只是文件中各种东西的布局是一样的。</P>
<P align=center><IMG border=0 height=411 src="" width=731> </P>
<P align=center>图 1.1</P>
<P> 图1.1是 JIURL PEDUMP 打开 Win2K 中的 explorer.exe
的截图。JIURL PEDUMP 是我写的一个小工具,从文件开始的 Dos Header 一直到 Section
Table,打开PE文件之后,点击相应结构,就会高亮显示文件中相应的部分。不过没有Sections。对了解 PE
格式有所帮助,可以很好的配合后面的介绍。可以到我的主页 <A
href="http://jiurl.yeah.net/">http://jiurl.yeah.net/</A> 上下载。</P>
<P><B>一 PE文件格式概述</B></P>
<P>PE文件结构的总体层次分布如下所示</P>
<P align=center> --------------<BR>|DOS MZ Header
|<BR>|--------------|<BR>|DOS Stub
|<BR>|--------------|<BR>|PE Header
|<BR>|--------------|<BR>|Section Table |<BR>|--------------|<BR>|Section
1 |<BR>|--------------|<BR>|Section
2 |<BR>|--------------|<BR>|Section
... |<BR>|--------------|<BR>|Section
n |<BR> --------------</P>
<P align=left> </P>
<P align=left>1.1 DOS Header</P>
<P align=left> PE文件最开始是一个简单的 DOS MZ header,它是一个
IMAGE_DOS_HEADER 结构。有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体,然后运行紧随 MZ Header 之后的
DOS Stub。</P>
<P align=left> 1.2 DOS Stub </P>
<P align=left> DOS Stub 是一个有效的 DOS 程序。当程序在DOS下运时,输出象
"This program cannot be run in DOS mode" 这样的提示。在 图1.1中就可以看到字符串 "This
program cannot be run in DOS mode"。这是编译器生成的默认stub程序。你也可以通过链接选项
/STUB:<I>filename </I>指定任何有效的MS-DOS可执行文件来替换它。</P>
<P align=left>1.3 PE Header</P>
<P align=left> 紧接着 DOS Stub 的是 PE Header。它是一个
IMAGE_NT_HEADERS
结构。其中包含了很多PE文件被载入内存时需要用到的重要域。执行体在支持PE文件结构的操作系统中执行时,PE装载器将从 DOS MZ header
中找到 PE header 的起始偏移量。因而跳过了 DOS stub 直接定位到真正的文件头 PE header。</P>
<P align=left>1.4 Section Table</P>
<P align=left> PE Header 接下来的数组结构 Section Table
(节表)。如果PE文件里有5个节,那么此 Section Table
结构数组内就有5个成员,每个成员包含对应节的属性、文件偏移量、虚拟偏移量等。图1中的节表有4个成员。</P>
<P align=left>1.5 Sections</P>
<P align=left> PE文件的真正内容划分成块,称之为sections(节)。Sections
是以其起始位址来排列,而不是以其字母次序来排列。通过节表提供的信息,我们可以找到这些节。图1.1所示的 explorer.exe
中有4个节。程序的代码,资源等等就放在这些节中。</P>
<P><B>二 PE文件格式中的结构及其作用</B></P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -