Windows可执行文件简述
- 格式:doc
- 大小:63.50 KB
- 文档页数:11
Windows的DLL文件原理与修改方法一、DLL文件常识DLL是Dynamic Link Library的缩写,意为动态链接库。
在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。
当我们执行某一个程序时,相应的DLL文件就会被调用。
一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。
DLL文件一般被存放在C:WindowsSystem目录下二、修改DLL文件的具体应用在系统的组策略和注册表中,我们可以修改一些键值来优化我们的系统,并加强操作系统的安全性。
可是,对于限制下载、禁止删除文件等功能,我们无法通过上述的操作来完成,这只有通过修改系统DLL文件来实现。
目前,我们通过修改系统的DLL文件,可以实现禁止删除文件、禁止IE下载、禁止IE另存为、禁止文件打开方式等功能。
三、系统中部分DLL文件的功能1、Browselc.dll IE所需要调用的库文件DLL结构雏形就是它了2、Shdoclc.dll 系统窗口及设置等,如删除文件、重命名3、Shell32.dll 系统窗口及设置等,如删除文件、重命名4、Cryptui.dll IE控件下载及提示对话框程序四、修改DLL文件的方法1、下载DLL文件修改工具EXESCOPE6.0-6.3或6.4工具2、获取Browselc.dll、Shdoclc.dll、Shell32.dll和Cryptui.dll这几个链接文件。
在找这几个文件时,最好将其他机器的硬盘,挂接在本机中,然后用本机的操作系统启动并复制这几个文件。
3、在修改DLL文件的时候,打开该键值,在右面的对话框中将所要修改的键值禁用即可,不要删除,以备日后恢复。
五、DLL文件修改秘籍1、禁止下载的修改方法:打开Shdoclc.dll修改资源--对话框---4416,将4416键值禁用即可。
pif为DOS环境下的可执行文件在Windows下执行时所需要的文件格式★常见的文件后缀名.ACA:Microsoft的代理使用的角色文档.acf:系统管理配置.acm:音频压缩管理驱动程序,为Windows系统提供各种声音格式的编码和解码功能.aif:声音文件,支持压缩,可以使用Windows Media Player和QuickTime Player 播放.AIF:音频文件,使用Windows Media Player播放.AIFC:音频文件,使用Windows Media Player播放.AIFF:音频文件,使用Windows Media Player播放.ani:动画光标文件扩展名,例如动画沙漏。
.ans:ASCII字符图形动画文件.arc:一种较早的压缩文件,可以使用WinZip,WinRAR,PKARC等软件打开.arj:压缩文件。
可以使用WinZip,WinRAR,PKARC等软件打开.asf:微软的媒体播放器支持的视频流,可以使用Windows Media Player播放.asp:微软的视频流文件,可以使用Windows Media Player打开.asp:微软提出的Active Server Page,是服务器端脚本,常用于大型网站开发,支持数据库连接,类似PHP。
可以使用Visual InterDev编写,是目前的大热门.asx:Windows Media 媒体文件的快捷方式.au:是Internet中常用的声音文件格式,多由Sun工作站创建,可使用软件Waveform Hold and Modify 播放。
Netscape Navigator中的LiveAudio也可以播放.au文件.avi:一种使用Microsoft RIFF规范的Windows多媒体文件格式,用于存储声音和移动的图片.bak:备份文件,一般是被自动或是通过命令创建的辅助文件,它包含某个文件的最近一个版本,并且具有于该文件相同的文件名.bas Basic:语言源程序文件,可编译成可执行文件,目前使用Basic开发系统的是Visual Basic.bat:批处理文件,在MS-DOS中,.bat文件是可执行文件,有一系列命令构成,其中可以包含对其他程序的调用.bbs:电子告示板系统文章信息文件.bfc:Windows的公文包文件.bin:二进制文件,其用途依系统或应用而定.bmp:Bitmap位图文件,这是微软公司开发Paint的自身格式,可以被多种Windows和Windows NT平台及许多应用程序支持,支持32位颜色,用于为Windows界面创建图标的资源文件格式。
linux,windows可执⾏⽂件(ELF、PE)现在PC平台流⾏的可执⾏⽂件格式(Executable)主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable Linkable Format),它们都是COFF(Common file format)格式的变种。
不光是可执⾏⽂件(Windows的.exe和Linux下的ELF可执⾏⽂件)按照可执⾏⽂件格式存储。
动态链接库(DLL,Dynamic Linking Library)(Windows的.dll和Linux的.so)及静态链接库(Static Linking Library)(Windows的.lib和Linux的.a)⽂件都按照可执⾏⽂件格式存储。
它们在Windows下都按照PE-COFF格式存储,Linux下按照ELF格式存储。
什么⼜是COFF格式呢?COFF是由Unix System V Release 3⾸先提出并且使⽤的格式规范,后来微软公司基于COFF格式,制定了PE格式标准,并将其⽤于当时的Windows NT系统。
System V Release 4在COFF的基础上引⼊了ELF格式,⽬前流⾏的Linux系统也以ELF作为基本可执⾏⽂件格式。
这也就是为什么⽬前PE和ELF如此相似的主要原因,因为它们都是源于同⼀种可执⾏⽂件格式COFF。
Unix最早的可执⾏⽂件格式为a.out格式,它的设计⾮常地简单,以⾄于后来共享库这个概念出现的时候,a.out格式就变得捉襟见肘了。
于是⼈们设计了COFF格式来解决这些问题,这个设计⾮常通⽤,以⾄于COFF的继承者到⽬前还在被⼴泛地使⽤。
COFF的主要贡献是在⽬标⽂件⾥⾯引⼊了“段”的机制,不同的⽬标⽂件可以拥有不同数量及不同类型的“段”。
另外,它还定义了调试数据格式。
⽬标⽂件有三种类型:1. 可重定位⽂件(Relocatable File)包含适合于与其他⽬标⽂件链接来创建可执⾏⽂件或者共享⽬标⽂件的代码和数据。
Windows可执行文件简述
Windows下的可执行文件有四种:.COM .MZ .LE .NE .PE
.PE格式
16位的程序是不健壮的,因此为了保证Windows的健壮性,Microsoft在Microsoft Windows NT 3.1及其以后的操作系统版本,也就是所有的基于Win32的操作系统中推出了一种新的可执行文件的格式,也就是PE文件格式。
PE的意思就是Portable Executable(可移植的可执行文件),内含32位程序代码和数据,是UNIX Common Object File Format(COFF)的演化。
PE格式比其它格式优越的关键点在于它有依字母次序排列的Exports,以及一个可以直接将程序影像映像成虚拟内存的内存文件映射功能。
与此同时,Microsoft也推出了新的obj文件和lib文件的格式。
从PE开始,可执行文件的结构开始有了正式的文档化。
Microsoft在Visual C++ 6的联机文档(即《MSDN Library Visual Studio 6.0》)中给出了以C语言描述的PE结构,这给开发者提供了很大的方便。
同时还在VC的Include目录里的WINNT.h文件中提供PE的各结构的定义,提供了PE文件中使用的原始数据结构。
编辑编译连接执行过程中对应的文件扩展名在编写、编译、连接和执行程序的过程中,不同的文件扩展名用于标识不同类型的文件。
下面是一些常见的文件扩展名及其相应的用途:
1. 源代码文件扩展名:
- .c:C语言源代码文件
- .cpp:C++语言源代码文件
- .java:Java语言源代码文件
- .py:Python语言源代码文件
- .html:HTML网页源代码文件
2. 目标文件扩展名:
- .o:目标文件,包含已编译但未链接的二进制代码
- .obj:Windows系统上的目标文件
- .class:Java字节码文件
3. 库文件扩展名:
- .a:静态库文件(在Unix和Linux系统中)
- .lib:静态库文件(在Windows系统中)
- .so:共享库文件(在Unix和Linux系统中)
- .dll:动态链接库文件(在Windows系统中)
4. 可执行文件扩展名:
- .exe:Windows可执行文件
- .out:Unix和Linux可执行文件
- .app:MacOS可执行文件
除了这些常见的文件扩展名之外,还有一些特定于某些开发环境或语言的扩展名。
例如,对于Web开发,还有.css(样式表文件)、.js (JavaScript文件)和.php(PHP脚本文件)。
对于数据库开发,还有.sql(SQL脚本文件)。
这些扩展名用于标识特定类型的文件,并告诉编译器、连接器和操作系统如何处理它们。
在编写程序时,应根据所使用的编程语言和工具链的要求为文件选择正确的扩展名。
这样可以确保编译、连接和执行过程能够正确进行,并且生成正确的可执行文件或库文件。
Windows系统常⽤后缀名⼤全欢迎关注我的公众号:Huayu_IT!⾥⾯有许多编程和计算机的有趣知识哦~Windows系统后缀名⼤全 - ⽬录本⽂是根据⾃⼰的经验花⼤⼼思整理起来的,还望各位尊重原创!话不多说,进⼊正题。
⽂档类⽆格式⽂本txt,logWorddoc,docx,dotx,docm,dotm,dot,rtf,odt等带x表明是2007以后的。
带m表⽰包括宏的,带t的(dot,dotx)表⽰模板。
rtf是富⽂本格式。
Powerpointppt,pptx,potx,pptm,potm,pot,ppsx,pps,odp等Excelxls, xlsx,xlsm,xlsb,xlt, xltm, xlsm, xla, xlm, xlw, odc等等其它pdf等⽹络类xml, htm, html, php, asp, aspx, js, css, xhtml, shtml, chm等等等等图⽚类位图bmp,jpg,png,tif, tiff, jpeg, gif, tga,ico等等等⽮量图cdr, ai, wmf, eps等视频类avi, mpg, mp4, mov, qt, rm, rmvb, asf, dat, mkv, swf等⾳频类wma, mp3, aif, au, ram, mmf, aac等等编程类c, cpp(c++), bas, pas(pascal), py(python), java, asm(汇编)a, lib(静态链接库)dll(动态链接库)obj(对象⽂件)可执⾏⽂件类exe(Windows可执⾏程序), com(MS-DOS应⽤程序)命令脚本类bat, cmd压缩⽂件类rar, zip, 7z, tar, gz, arj等快捷⽅式类lnk, url等其它类临时⽂件tmp等磁盘映像iso(光盘), img(软盘)等系统⽂件dll, db, int, sys, adt配置设置ini远程桌⾯rdp⼆进制⽂件(binary)bin安全⽬录ctf帮助⽂件hlp字体⽂件fot, fon备份⽂件gho, bak驱动⽂件drv。
Pyinstaller打包详解---⽣成windows、linux下的整包可执⾏⽂件1、原理及作⽤:pyinstaller⾃⾝打包的流程:读取编写好的python脚本,分析其中调⽤的模块和库,然后收集这些⽂件的副本(包括Python的解释器)。
最后把副本与脚本,可执⾏⽂件等放在⼀个⽂件夹中,或者可选的封装在⼀个可执⾏⽂件中。
我们可以将⾃⼰的python代码打包成⼀个可执⾏⽂件。
起到代码保护和封装的作⽤。
2、打包流程:简略描述Pyinstall的打包流程:①下载好Pyinstaller之后,②拷贝上述spec⽂件并增删⾃⼰的⼯程代码路径(或使⽤pyi-makespec main.py命令⽣成.spec⽂件)③执⾏ pyinstaller main.spec④在dist中,检验⽣成的 main可执⾏⽂件2-1、安装pyinstallerpip install pyinstaller2-2、拷贝main.spec⽂件我们⽤main.spec⽂件记录打包需要的⽂件依赖等,pyinstaller参数的本质可认为是 .spec⽂件中的配置属性。
main.spec⽂件可按照类型直接在internet中拷贝模板即可,之后进⾏修改。
(下⽂有模板⽰例)以camera_stress_test_tool_main⼯具为例:将下⾯模板的camera_stress_test_tool_main.spec⽂件拷贝⾄和 main.py同⽬录下(亦可⽤pyi-makespec main.py⽣成 .spec⽂件,需注意按需使⽤参数)-F, –onefile打包⼀个单个⽂件-D, –onedir打包多个⽂件,在dist中⽣成很多依赖⽂件,适合以框架形式编写⼯具代码,我个⼈⽐较推荐这样,代码易于维护-K, –tk在部署时包含 TCL/TK-a, –ascii不包含编码.在⽀持Unicode的python版本上默认包含所有的编码.-d, –debug产⽣debug版本的可执⾏⽂件-w,–windowed,–noconsole使⽤Windows⼦系统执⾏.当程序启动的时候不会打开命令⾏(只对Windows有效)-c,–nowindowed,–console使⽤控制台⼦系统执⾏(默认)(只对Windows有效)pyinstaller -c xxxx.pypyinstaller xxxx.py –console-s,–strip可执⾏⽂件和共享库将run through strip.注意Cygwin的strip往往使普通的win32 Dll⽆法使⽤.-X, –upx如果有UPX安装(执⾏Configure.py时检测),会压缩执⾏⽂件(Windows系统中的DLL也会)(参见note)-o DIR, –out=DIR 指定spec⽂件的⽣成⽬录,如果没有指定,⽽且当前⽬录是PyInstaller的根⽬录,会⾃动创建⼀个⽤于输出(spec和⽣成的可执⾏⽂件)的⽬录.如果没有指定,⽽当前⽬录不是PyInstaller的根⽬录,则会输出到当前的⽬录下.-p DIR, –path=DIR 设置导⼊路径(和使⽤PYTHONPATH效果相似).可以⽤路径分割符(Windows使⽤分号,Linux使⽤冒号)分割,指定多个⽬录.也可以使⽤多个-p参数来设置多个导⼊路径,让pyinstaller⾃⼰去找程序需要的资源–icon=<FILE.ICO>将file.ico添加为可执⾏⽂件的资源(只对Windows系统有效),改变程序的图标 pyinstaller -i ico路径 xxxxx.py –icon=<FILE.EXE,N>将file.exe的第n个图标添加为可执⾏⽂件的资源(只对Windows系统有效)-v FILE, –version=FILE将verfile作为可执⾏⽂件的版本资源(只对Windows系统有效)-n NAME, –name=NAME可选的项⽬(产⽣的spec的)名字.如果省略,第⼀个脚本的主⽂件名将作为spec的名字camera_stress_test_tool_main.spec⽂件模板⽰例:(模板为单⽂件⽰范)# -*- mode: python ; coding: utf-8 -*-block_cipher = Nonea = Analysis(['main.py','./cfg/__init__.py','./cfg/setting.py','./comm/__init__.py','./comm/logger.py','./comm/utils.py','./handler/__init__.py','./handler/invite_handler.py','./handler/sip_parse_handler.py','./handler/subscribe_handler.py','./my_thread/__init__.py','./my_thread/alarm.py','./my_thread/audio_media.py','./my_thread/audio_media_rtp.py','./my_thread/broadcast.py','./my_thread/my_sip_epoll.py','./my_thread/timer.py','./my_thread/video_media.py','./redis_utils/__init__.py','./redis_utils/redis_keys.py','./redis_utils/redis_work.py','./__init__.py','./device.py','./std/ietf/__init__.py','./std/ietf/rfc1035.py','./std/ietf/rfc2198.py','./std/ietf/rfc2396.py','./std/ietf/rfc2617.py','./std/ietf/rfc2833.py','./std/ietf/rfc3261.py','./std/ietf/rfc3489.py','./std/ietf/rfc5658.py','./std/ietf/rfc6455.py','./std/ietf/rfc7064.py','./std/ietf/rfc7065.py','./std/itu_t/__init__.py','./std/w3c/__init__.py','./std/w3c/simplexml.py','./std/__init__.py'],pathex=['./'],binaries=[],datas=[],hiddenimports=[],hookspath=[],runtime_hooks=[],excludes=[],win_no_prefer_redirects=False,win_private_assemblies=False,cipher=block_cipher,noarchive=False)pyz = PYZ(a.pure, a.zipped_data,cipher=block_cipher)exe = EXE(pyz,a.scripts,a.binaries,a.zipfiles,a.datas,[],name='main',debug=False,bootloader_ignore_signals=False,strip=False,upx=True,upx_exclude=[],runtime_tmpdir=None,console=True )2-3、修改main.spec⽂件⼀般来说,我们需要在“Analysis”这个item中,加⼊打包的代码的路径,(此处需注意路径相关依赖,与创建spec的路径相对应,⼀般在main.py⽂件基础上找,可写绝对及相对路径)。
2022年职称计算机考试《Windows XP 》必考题带答案与解析姓名:_____________ 年级:____________ 学号:______________1、[判断]所有CD-ROM 光盘只能读,不能写( )此题为判断题(对,错)。
参考答案:2、[单选] 找出下列不能分配给主机的IP 地址,并说明原因A .131.107.256.80B .231.222.0.11C .126.1.0.0D .198.121.254.255E .202.117.34.32参考答案:A.第三个数256是非法值,每个数字都不能大于255 B.第一个数231是保留给组播的地址,不能用于主机地址 C.以全0结尾的IP 地址是网络地址,不能用于主机地址 D.以全1结尾的IP 地址是广播地址,不能用于主机地址3、[多选]下列关于打印机优先级正确的叙述是( )。
A .在打印机服务器上设置优先级B .在每个员工的机器上设置优先级C .设置打印机优先级时,需要一台逻辑打印机对应2台或多台物理打印机D .设置打印机优先级时,需要一台物理打印机对应2台或多台逻辑打印机参考答案:AD4、[主观]若要改变打印时的纸张大小,正确的是( )A.[页面设计]对话框中的[纸张大小]B.[页面设计]对话框中的[若要改变打印时的纸张大小,正确的是( )A.[页面设计]对话框中的[纸张大小]B.[页面设计]对话框中的[中文版式]C.[版式]对话框中的[中文版式]D.[工具]对话框中的[选项]参考答案:A5、[判断]在Windows 计算机上只能对文件实施共享,而不能对文件夹实施共享。
( )参考答案:6、[单选]关于WindowsXP“开始”菜单的叙述,不正确的是( )。
A .在“开始”菜单中可以直接显示Internet 快捷方式B .通过“开始”菜单,可直接打开“我的电脑”窗口C.对于那些常用的程序也是通过“所有程序”组来选择执行D.在“开始”菜单的命令选项前显示有图标参考答案:C7、[单选]在Windows 中,快捷方式提供( )A.对源文件的快捷复制方法B.快速访问文件的一种方法C.对源文件的快捷删除方法D.对源文件的快捷保存方法参考答案:B8、[主观]在Windows XP默认环境中,下列哪种方法不能运行应用程序( )。
Windows可执行文件简述操作系统中的文件是一种抽象的机制,提供了一种在磁盘上保存信息而且方便以后读取的方法。
在Windows操作系统中,一个用户可以最直接体会到的文件的形式就是以.exe、.dll等为扩展名的可执行文件。
伴随着Windows操作系统的不断进步,其可执行文件的格式也发生了巨大变化。
这期间主要有4个过程:DOS中出现的最简单的以.com为扩展名的可执行文件和以.exe为扩展名的MZ格式(MZ是MZ格式的主要作者Mark Zbikowski的名字的缩写)的可执行文件,Win 3.x下出现的NE(New Executable:分段可执行文件)格式的.exe和.dll文件,Win 3.x 和Win9x所专有的LE(Linear Executable:线性可执行文件,专用于VxD文件),Win9x和Win NT/2000/XP下的32位的可执行文件PE (Portable Executable:可移动的可执行文件)。
这里面com、MZ和NE 属于Win16,PE属于Win32,LE可以兼容Win16和Win32。
在一个操作系统中,可执行的代码最终被装入内存执行之前是以文件的方式存放在磁盘中的,也就是以可执行文件的方式。
下面是Microsoft Windows操作系统中的可执行文件的概述。
1.com格式Windows下最简单的可执行文件就是DOS下的以.com为扩展名的com 文件。
com文件是旧有的只有64kb内存的cp/m机器的产物。
com格式文件最大64K,com文件内含16位程序的二进制代码映像,没有重定位信息。
com文件包含程序的二进制代码的一个绝对映像。
也就是说,为了运行程序准确的处理器指令和内存中的数据,MS-DOS通过直接把该映像从文件拷贝到内存而加载com程序;它不作任何改变。
为加载一个com程序,MS-DOS首先试图分配内存,因为com程序必须位于一个64K的段中,所以com文件的大小不能超过65,024(64K 减去用于PSP的256字节和用于一个起始堆栈的至少256字节)。
如果MS-DOS不能为程序、一个PSP、一个起始堆栈分配足够内存,则分配尝试失败。
否则,MS-DOS分配尽可能多的内存(直至所有保留内存)。
即使com程序本身不能大于64K。
在试图运行另一个程序或分配另外的内存之前,大部分com程序释放任何不需要的内存。
分配内存后,MS-DOS在该内存的头256字节建立一个PSP(Program Segment Prefix,程序段前缀),PSP结构如下:如果PSP中的第一个FCB含有一个有效驱动器标识符,则置AL为00h,否则为0FFh。
MS-DOS还置AH为00h或0FFh,这依赖于第二个FCB是否含有一个有效驱动器标识符。
建造PSP后,MS-DOS在PSP后立即开始(偏移100h)加载com文件,它置SS、DS和ES为PSP的段地址,接着创建一个堆栈。
为了创建这个堆栈,MS-DOS置SP为0000h。
如果没有分配64K内存,则要置寄存器为比所分配的字节总数大2的值。
最后,它把0000h推进栈,这是为了保证与在早期MS-DOS版本上设计的程序的兼容性。
MS-DOS通过把控制传递偏移100h处的指令而启动程序。
程序设计者必须保证com文件的第一条指令是程序的入口点。
注意,因为程序是在偏移100h处加载,因此所有代码和数据偏移也必须相对于100h.汇编语言程序设计者可通过置程序的初值为100h而保证这一点(例如通过在原程序的开始使用语句org 100h)。
下面是一个简单的com文件Win32 ASM的例子:MAN STRUCT ;定义一个结构W dw 1234h ;dw 也可用wordB db 9 dup(?) ;db 也可用byteMAN ENDS.model tiny ;com格式文件.data ;对于com格式文件,数据段的内容会自动放到代码段后zz MAN <>,<1,"abcd">,<3,"Ldf">.code ;代码段.startup ;可使下面的指令从0100H 开始(com格式文件要求)mov ax,3031hmov zz.W,ax ;对结构赋值mov zz.B,'1'mov ax,type(MAN) ;取结构所占字节数.exit ;可设置返回码end2.MZ格式com发展下去就是MZ格式的可执行文件,这是DOS所能了解的具有重定位功能的可执行文件格式。
MZ可执行文件内含16位代码,在这些代码之前加了一个文件头,文件头中包括各种说明数据,如第一句可执行代码执行指令时所需要的文件入口点、堆栈的位置、重定位表等,操作系统根据文件头重的信息将代码部分装入内存,让后根据重定位表修正代码,最后在设置好堆栈后从文件头中指定的入口开始执行。
所以DOS可以把程序放在任何它想要的地方。
下图是MZ格式的可执行文件的简单结构示意图:3.NE格式为了保持对DOS的兼容性和保证Windows的需要,在Win 3.x中出现的NE格式的可执行文件中保留了MZ格式的头(具体原因后面会说,这里就不赘述了),同时NE文件又加了一个自己的头,之后才是可执行文件的可执行代码。
Win 3.x中的16位Windows程序或OS/2程序都有可能是NE格式的。
NE类型包括了.exe、.dll、.drv和.fon四种类型的文件。
NE格式的关键特性是:它把程序代码、数据、资源隔离在不同的可加载区块中。
它也藉由符号输入和输出,实现所谓的执行时期动态链接。
16位的NE格式文件装载程序(NE Loader)读取部分磁盘文件,并生成一个完全不同的数据结构,在内存中建立模块。
当代码或数据需要装入时,装载程序必须从全局内存中分配出一块,查找原始数据在文件的什么地方,找到位置后再读取原始的数据,最后再进行一些修整。
还有,每一个16位的Module要负责记住现在使用的所有段选择符,该选择符表示该段是否已经被抛弃等等。
下图是NE格式的可执行文件的结构示意图:4.LE格式在Windows3.x的时代,从DOS启动Windows,Windows在把机器转到保护模式之前需要在实模式下做一些初始化。
实模式的16位代码必须和32位代码一起放在可执行文件中。
旧的DOS下的可执行文件和NE 格式的可执行文件无法满足这个要求,于是从Win 3.x起到Win 9x,产生了一种新型的可执行文件格式LE,它只适用于工作于系统底层的、同时包含16位代码和32位代码的VxD驱动程序。
OS/2 2.x也使用LE 格式。
一般而言,保护模式下的可执行文件会在不同的Sections中放置程序代码和数据,利用可执行文件头中的各种属性标志来告诉可执行文件加载器在面对这些Sections时的各种细节动作。
但是VxD却将程序代码和数据混杂在段之中,通过不同段前的标识来表明该段在运行时的特性。
程序代码和数据之所以能够混杂在一起,而仍然能够有效运作,是因为VxD所使用的平坦模式的代码和平坦模式下的数据选择器有相同的基地址与限制因素。
因此不论使用上述哪一个寄存器缓存器都可以取用程序代码或数据。
下图是LE格式的可执行文件的结构示意图:在LE文件中,代码和数据被存放在几类运行属性不同的段中。
下面是LE文件之中一些可用的段类:LCODE:页面锁定的代码和数据段。
这种段被锁定在内存里。
换句话说,这段永远不会被放到硬盘上去,所以你一定要谨慎的使用这种段类以免浪费宝贵的内存。
那些每时每刻都必须放在内存中的代码和数据应该放在这个段里。
尤其是那些硬件中断处理程序。
PCODE:可调页代码段。
VMM可以对这种段实行调页处理,在这种段里的代码不必时刻放在内存里,当VMM需要物理内存的时候,它就会把这段放到硬盘上去。
PDATA:可调页数据段。
ICODE:仅用于的初始化段。
这种段里的代码仅仅用来进行VxD的初始化。
当初始化完成后,VMM就把这段从内存中释放。
DBOCODE:仅用于调试的代码数据段。
当你要调试VxD程序时,就要用到这种段里的代码和数据,例如,它包含要调试的消息的处理代码。
SCODE:静态代码和数据段。
这种段时刻存在于内存中,即使VxD已经卸载,这种段对某些动态的VxD程序很有用,这些VxD程序需要在某一Windows进程里不停的加载/卸载而又要纪录上次的环境和状态。
RCODE:实模式初始化代码数据段。
这种段包含实模式初始化需要的16位代码和数据。
16ICODE:保护模式初始化数据段。
这是一个16位的段,它包含VxD 要从保护模式拷贝到V86模式的代码。
例如,如果你要把一些V86的代码拷贝到一个虚拟机上时,你想拷贝的代码就要放在这里。
如果你把它放在其他的段里,编译程序就会产生错误的代码,例如,它会产生32位代码而不是16位代码。
MCODE:锁定的消息字串。
这种段包含了由VMM消息宏帮助编译的消息字串,这有助于你构造你的驱程的国际版本。
5.PE格式16位的程序是不健壮的,因此为了保证Windows的健壮性,Microsoft 在Microsoft Windows NT 3.1及其以后的操作系统版本,也就是所有的基于Win32的操作系统中推出了一种新的可执行文件的格式,也就是PE文件格式。
PE的意思就是Portable Executable(可移植的可执行文件),内含32位程序代码和数据,是UNIX Common Object File Format(COFF)的演化。
PE格式比其它格式优越的关键点在于它有依字母次序排列的Exports,以及一个可以直接将程序影像映像成虚拟内存的内存文件映射功能。
与此同时,Microsoft也推出了新的obj文件和lib文件的格式。
PE文件结构的总体层次分布图如下:从PE开始,可执行文件的结构开始有了正式的文档化。
Microsoft 在Visual C++ 6的联机文档(即《MSDN Library Visual Studio 6.0》)中给出了以C语言描述的PE结构,这给开发者提供了很大的方便。
同时还在VC的Include目录里的WINNT.h文件中提供PE的各结构的定义,提供了PE文件中使用的原始数据结构。