站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
可执行程序
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
'''可执行程序'''(EXE File) *一种可在[[操作系统]]存储空间中浮动定位的可执行程序。MS-DOS和MS-WINDOWS下,此类文件扩展名为.exe *WINDOWS操作系统中的二进制可执行文件,可执行文件分两种一种是后辍名为.COM另一种就是.EXE ==定义== *.COM一般用于DOS,在[[WINDOWS]]系统中的执行文件一般都是.EXE文件。在 MS-DOS 中,用以标识可执行文件的文件扩展名。用户在提示行输入不带 .exe 扩展名的文件名后按 Enter 键就能运行可执行程序 ==文件结构== *EXE 文件比较复杂,每个EXE文件都有一个文件头,结构如下: #EXE文件头的信息 {|class="wikitable" border="1" |- !偏移量!!意义 |- |00h-01h||MZ'EXE文件标记 |- |02h-03h||最后一页的字节数(每页512B) |- |04h-05h||文件长度(字节数)除以512的商+1 |- |06h-07h||重定位项的个数 |- |08h-09h||文件头除16的商 |- |0ah-0bh||程序运行所需最小段数 |- |0ch-0dh||....大.... |- |oeh-0fh||[[堆栈]]段的段值 (SS) |- |10h-11h||........sp |- |12h-13h||文件校验和 |- |14h-15h||IP |- |16h-17h||CS |- |18h-19h||............ |- |1ah-1bh||............ |- |1ch||............ |} *.EXE文件包含一个文件头和一个可重定位程序映象。文件头包含MS-DOS用于加载程序的信息,例如程序的大小和寄存器的初始值。文件头还指向一个重定位表,该表包含指向程序映象中可重定位段地址的指针链表。文件头的形式与EXEHEADER结构对应: #EXEHEADER STRUC #*exSignature dw 5A4Dh ;.EXE标志 #*exExraBytes dw ;最后(部分)页中的字节数 #*exPages dw ;文件中的全部和部分页数 #*exRelocItems dw ;重定位表中的指针数 #*exHeaderSize dw ;以字节为单位的文件头大小 #*exMinAlloc dw ;最小分配大小 #*exMaxAlloc dw ;最大分配大小 #*exInitSS dw ;初始SS值 #*exInitSP dw ;初始SP值 #*exChechSum dw ;补码校验值 #*exInitIP dw ;初始IP值 #*exInitCS dw ;初始CS值 #*exRelocTable dw ;重定位表的字节偏移量 #*exOverlay dw ;覆盖号 #EXEHEADER ENDS程序映象 #*包含处理器代码和程序的初始数据,紧接在文件头之后。它的大小以字节为单位,等于EXE文件的大小减去文件头的大小,也等于exHeaderSize的域的值乘以16。MS-DOS通过把该映象直接从文件拷贝到内存加载.EXE程序然后调整定位表中说明的可重定位段地址。 #*定位表是一个重定位指针数组,每个指向程序映象中的可重定位段地址。文件头中的exRelocItems域说明了数组中指针的个数,exRelocTable域说明了分配表的起始文件偏移量。每个重定位指针由两个16位值组成:偏移量和段值。 为加载.EXE程序,MS-DOS首先读文件头以确定.EXE标志并计算程序映象的大小。然后它试图申请内存。首先,它计算程序映象文件的大小加上PSP的大小再加上EXEHEADER结构中的exMinAlloc域说明的内存大小这三者之和,如果总和超过最大可用内存块的大小。则MS-DOS停止加载程序并返回一个出错值。如果总和没超过最大可用内存块的大小,它便计算程序映象的大小加上PSP的大小再加上EXEHEADER结构中exMaxAlloc域说明的内存大小之和,如果第二个总和小于最大可用内存块的大小,则MS-DOS 分配计算得到的内存量。否则,它分配最大可用内存块。分配完内存后,MS-DOS确定段地址,也称为起始段地址,MS-DOS从此处加载程序映象。如果exMinAlloc域和exMaxAlloc域中的值都为零,则MS-DOS把映象尽可能地加载到内存最高端。否则,它把映象加载到紧挨着PSP域之上。接下来,MS-DOS读取重定位表中的项目调整所有由可重定位指针说明的段地址。对于重定位表中的每个指针,MS-DOS寻找程序映象中相应的可重定位段地址,并把起始段地址加到它之上。一旦调整完毕,段地址便指向了内存中被加载程序的代码和数据段。 MS-DOS在所分配内存的最低部分建造256字节的PSP,把AL和AH设置为加载 .COM程序时所设置的值。MS-DOS使用文件头中的值设置SP与SS,调整SS初始值,把起始地址加到它之上。MS-DOS还把ES和DS设置为PSP的段地址.最后,MS-DOS从程序文件头读取CS和IP的初始值,把起始段地址加到CS之 上,把控制转移到位于调整后地址处的程序。 ==相关条目== [[计算机程序]]| [[程序设计]]| [[源代码]] ==参考来源== *http://baike.baidu.com/view/2473450.htm [[category:计算机|K]] [[category:程序|K]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)