Board logo

标题: [特效代码] DOS MZ executable [打印本页]

作者: cjiabing    时间: 2012-4-19 23:36     标题: DOS MZ executable

  1. MZ 以这两个字母开头的BAT是以COM的窗口运行的,而非我们常见的BAT窗口。
  2. echo ok
  3. pause
复制代码

如果将文件后缀名改为BAT、COM、MZ,(CMD除外),则可以在CMD中正常运行,直接双击可能无法成功执行。
MZ可能是过去DOS下的执行文件,具体原因不详,求解释!
参考:http://en.wikipedia.org/wiki/DOS_executable
作者: qzwqzw    时间: 2012-4-20 09:21

如果将文件后缀名改为BAT、COM、MZ,(CMD除外),则可以在CMD中正常运行,直接双击可能无法成功执行。
...
cjiabing 发表于 2012-4-19 23:36


难以理解
批处理改为.com和.mz的后缀后
我无法使它能正常运行

在cmd窗口中
无论执行.bat还是.cmd
都可以正常运行

直接双击执行文件
.bat会打开ntvdm
并在此环境中解释执行脚本
.cmd会直接退出
但它也曾打开ntvdm
作者: rat    时间: 2012-4-20 13:01

回复 2# qzwqzw


    是说把exe改后缀!!!

其实不光是mz后缀,貌似任意后缀都可以,甚至没有后缀也可以。
cmd内部调用CreateProcessW来启动进程!!!
作者: vsbat    时间: 2012-4-20 14:27

Windows系统下的可执行文件,也就是一般的 exe,dll,sys等都是PE文件格式。典型的就是
"MZ"开头之后一定偏移后有"PE"标志。MZ是应为了兼容以前的com格式的。com文件有自己的格式"MZ"开头就是他的一个标志,com文件时16位文件所以会启动ntvdm来虚拟执行。

.bat,.cmd,.exe,.com 在一般情况下都是可执行的,只要是这几个后缀名 windows就会把它当做可执行文件。载入内存后再判断文件格式,也就是说后缀名是浮云只表示他是可执行。依据文件格式来决定执行方式。这就是为什么exe改名为bat后依然可以正确运行。你这个因该是恰好入了com执行的路线,因为有个MZ
作者: applba    时间: 2012-4-20 22:46

可执行文件这个概念:既包含二进制的PE文件,也包含文本模式的脚本文件。
作者: cjiabing    时间: 2012-4-21 00:33

回复 3# rat


    这种说法不够严谨,因为,把上面代码保存为.bat、.mz、.com等后缀名可以在cmd直接调用,但改成 .cmd 就未必能在cmd里执行了。
作者: qzwqzw    时间: 2012-4-21 23:00

在XPSp3环境中测试得到以下结论:

首先可以确认的是
对于一个可执行程序文件来说
在资源管理器中双击该文件的图标
和在cmd窗口中输入该文件的名称
有很大的不同

双击图标调用程序(后缀需是四个中的一个)
主要依靠文件头判断创建什么进程
PE头的32位程序创建自身进程
MZ头的16为程序创建NTVDM进程
对于无头的裸文件依据后缀名来判断
无头的.com .exe创建ntvdm进程
无头的.bat .cmd创建cmd经常

在cmd中输入文件名调用程序
会首先判断后缀名
对于.bat .cmd 的后缀名
会使用当前cmd进程直接解释执行该程序
对于.com .exe 的后缀名
会根据文件头来选择创建不同的进程
PE头创建自身进程
MZ头或者无头创建ntvdm进程

至于创建什么进程
是依据文件头结合后缀来决定的
32位带PE头的直接创建自身的进程
16位带MZ头的.exe或者无头的.com
会创建NTVDM.exe进程去虚拟16位环境解释该程序

回到你楼顶的代码上来
因为它是以MZ开头
所以被认定为MZ头的程序
在双击图标执行时会忽略其后缀名
启动ntvdm进程解释执行该程序

在cmd中调用时
.bat和.cmd的后缀程序
会被当作脚本在当前cmd中解释执行
.com和.exe的后缀程序
会被当作MZ头程序打开ntvdm解释执行




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2