⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lion-petut-c01.htm

📁 在DOS下编程因为实模式的限制
💻 HTM
📖 第 1 页 / 共 2 页
字号:
size="2" face="MS Sans Serif">"This program cannot run in
DOS mode&quot;</font><font size="2">。</font></p>

<p><font size="2">紧接着 </font><font size="2"
face="MS Sans Serif">DOS stub </font><font size="2">的是</font><font
color="#FFFFCC" size="2"><b> </b></font><font color="#FFFFCC"
size="2" face="MS Sans Serif"><b>PE header</b></font><font
size="2">。 </font><font size="2" face="MS Sans Serif">PE header
</font><font size="2">是</font><font size="2"
face="MS Sans Serif">PE</font><font size="2">相关结构</font><font
color="#FFFFCC" size="2"><b> </b></font><font color="#FFFFCC"
size="2" face="MS Sans Serif"><b>IMAGE_NT_HEADERS</b></font><font
size="2"> 的简称,其中包含了许多</font><font size="2"
face="MS Sans Serif">PE</font><font size="2">装载器用到的重要域。当我们更加深入研究</font><font
size="2" face="MS Sans Serif">PE</font><font size="2">文件格式后,将对这些重要域耳目能详。执行体在支持</font><font
size="2" face="MS Sans Serif">PE</font><font size="2">文件结构的操作系统中执行时,</font><font
size="2" face="MS Sans Serif">PE</font><font size="2">装载器将从
</font><font size="2" face="MS Sans Serif">DOS MZ header</font><font
size="2"> 中找到 </font><font size="2" face="MS Sans Serif">PE
header</font><font size="2"> 的起始偏移量。
因而跳过了 </font><font size="2" face="MS Sans Serif">DOS
stub </font><font size="2">直接定位到真正的文件头 </font><font
size="2" face="MS Sans Serif">PE header</font><font size="2">。</font></p>

<p><font size="2" face="MS Sans Serif">PE</font><font size="2">文件的真正内容划分成块,称之为</font><font
color="#FFFFCC" size="2" face="MS Sans Serif"><b>sections</b></font><font
size="2">(节)。
每节是一块拥有共同属性的数据,比如代码</font><font
size="2" face="MS Sans Serif">/</font><font size="2">数据、读</font><font
size="2" face="MS Sans Serif">/</font><font size="2">写等。我们可以把</font><font
size="2" face="MS Sans Serif">PE</font><font size="2">文件想象成一逻辑磁盘,</font><font
size="2" face="MS Sans Serif">PE header </font><font size="2">是磁盘的</font><font
size="2" face="MS Sans Serif">boot</font><font size="2">扇区,而</font><font
size="2" face="MS Sans Serif">sections</font><font size="2">就是各种文件,每种文件自然就有不同属性如只读、系统、隐藏、文档等等。</font><font
color="#66FF00" size="2"><b> 值得我们注意的是 </b></font><font
color="#66FF00" size="2" face="MS Sans Serif"><b>---- </b></font><font
color="#66FF00" size="2"><b>节的划分是基于各组数据的共同属性</b></font><font
color="#66FF00" size="2" face="MS Sans Serif"><b>: </b></font><font
color="#66FF00" size="2"><b>而不是逻辑概念。</b></font><font
size="2">重要的不是数据</font><font size="2"
face="MS Sans Serif">/</font><font size="2">代码是如何使用的,如果</font><font
size="2" face="MS Sans Serif">PE</font><font size="2">文件中的数据</font><font
size="2" face="MS Sans Serif">/</font><font size="2">代码拥有相同属性,它们就能被归入同一节中。不必关心节中类似于</font><font
size="2" face="MS Sans Serif">&quot;data&quot;, &quot;code&quot;</font><font
size="2">或其他的逻辑概念</font><font size="2"
face="MS Sans Serif">: </font><font size="2">如果数据和代码拥有相同属性,它们就可以被归入同一个节中。(译者注:节名称仅仅是个区别不同节的符号而已,类似</font><font
size="2" face="MS Sans Serif">&quot;data&quot;, &quot;code&quot;</font><font
size="2">的命名只为了便于识别,惟有节的属性设置决定了节的特性和功能)如果某块数据想付为只读属性,就可以将该块数据放入置为只读的节中,当</font><font
size="2" face="MS Sans Serif">PE</font><font size="2">装载器映射节内容时,它会检查相关节属性并置对应内存块为指定属性。</font></p>

<p><font size="2">如果我们将</font><font size="2"
face="MS Sans Serif">PE</font><font size="2">文件格式视为一逻辑磁盘,</font><font
size="2" face="MS Sans Serif">PE header</font><font size="2">是</font><font
size="2" face="MS Sans Serif">boot</font><font size="2">扇区而</font><font
size="2" face="MS Sans Serif">sections</font><font size="2">是各种文件,但我们仍缺乏足够信息来定位磁盘上的不同文件,譬如,什么是</font><font
size="2" face="MS Sans Serif">PE</font><font size="2">文件格式中等价于目录的东东?
别急,那就是 </font><font size="2" face="MS Sans Serif">PE
header </font><font size="2">接下来的</font><font
color="#FFFFCC" size="2">数组结构<b> </b></font><font
color="#FFFFCC" size="2" face="MS Sans Serif"><b>section table</b></font><font
color="#FFFFCC" size="2"><b>(节表)。 </b></font><font
size="2">每个结构包含对应节的属性、文件偏移量、虚拟偏移量等。如果</font><font
size="2" face="MS Sans Serif">PE</font><font size="2">文件里
有</font><font size="2" face="MS Sans Serif">5</font><font
size="2">个节,那么此结构数组内就有</font><font
size="2" face="MS Sans Serif">5</font><font size="2">个成员。因此,我们便可以把节表视为逻辑磁盘中的根目录,每个数组成员等价于根目录中目录项。</font></p>

<p><font size="2">以上就是</font><font size="2"
face="MS Sans Serif">PE</font><font size="2">文件格式的物理分布,下面将总结一下装载一</font><font
size="2" face="MS Sans Serif">PE</font><font size="2">文件的主要步骤</font><font
size="2" face="MS Sans Serif">:</font></p>

<ol>
    <li><font size="2">当</font><font size="2"
        face="MS Sans Serif">PE</font><font size="2">文件被执行,</font><font
        size="2" face="MS Sans Serif">PE</font><font size="2">装载器检查
        </font><font size="2" face="MS Sans Serif">DOS MZ header </font><font
        size="2">里的 </font><font size="2"
        face="MS Sans Serif">PE header </font><font size="2">偏移量。如果找到,则跳转到
        </font><font size="2" face="MS Sans Serif">PE header</font><font
        size="2">。</font> </li>
    <li><font size="2" face="MS Sans Serif">PE</font><font
        size="2">装载器检查 </font><font size="2"
        face="MS Sans Serif">PE header </font><font size="2">的有效性。如果有效,就跳转到</font><font
        size="2" face="MS Sans Serif">PE header</font><font
        size="2">的尾部。</font> </li>
    <li><font size="2">紧跟 </font><font size="2"
        face="MS Sans Serif">PE header </font><font size="2">的是节表。</font><font
        size="2" face="MS Sans Serif">PE</font><font size="2">装载器读取其中的节信息,并采用文件映射方法将这些节映射到内存,同时付上节表里指定的节属性。</font></li>
    <li><font size="2" face="MS Sans Serif">PE</font><font
        size="2">文件映射入内存后,</font><font size="2"
        face="MS Sans Serif">PE</font><font size="2">装载器将处理</font><font
        size="2" face="MS Sans Serif">PE</font><font size="2">文件中类似
        </font><font size="2" face="MS Sans Serif">import table</font><font
        size="2">(引入表)逻辑部分。</font></li>
</ol>

<p><font size="2">上述步骤是基于本人观察后的简述,显然还有一些不够精确的地方,但基本明晰了执行体被处理的过程。</font></p>

<p><font size="2">你应该下载 </font><a
href="http://203.157.250.93/win32asm/files/pe1.zip"
style="TEXT-DECORATION: none"><font size="2" face="MS Sans Serif"><b>LUEVELSMEYER</b></font><font
size="2"><b>的《</b></font><font size="2" face="MS Sans Serif"><b>PE</b></font><font
size="2"><b>文件格式》</b></font></a><font size="2"><b>。</b>
该文的描述相当详细,可用作案头的参考手册。</font></p>

<hr>

<p align="center"><font size="2"><b>翻译:</b></font><font
size="2" face="MS Sans Serif"><b>iamgufeng [</b></font><a
href="http://win32asm.cjb.net/"><font size="2"
face="MS Sans Serif"><b>Iczelion's Win32 Assembly Homepage</b></font></a><font
size="2" face="MS Sans Serif"><b>]</b><strong>[</strong></font><a
href="http://asm.yeah.net"><font size="2" face="MS Sans Serif"><strong>LuoYunBin's
Win32 ASM Page</strong></font></a><font size="2"
face="MS Sans Serif"><strong>]</strong></font></p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -