[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 broly 于 2012-12-23 19:34 编辑

回复 4# Demon


    我觉得是这样的:

1.双击一个文件,系统首先会查找注册表信息。
这里查到的是%1 %*的意思就是直接执行,不需要解析器。

2.bat com exe都是直接执行的,系统PE装载器开始识别文件的PE头结构。
(有关PE头文件的知识不懂的朋友可以网上找资料)
通过PE头可以判断时候为可执行文件,并判断其子系统类型。
_IMAGE_OPTIONAL_HEADER 结构的 Subsystem 项可以判断在DOS、WIN32、windows控制台等子系统下运行。
http://msdn.microsoft.com/ZH-CN/library/windows/desktop/ms680339(v=vs.85).aspx)
用UE之类的软件打开可执行文件,会发现有This program cannot be run in DOS mode 一类的文字,其实就是PE头的一些信息

3.如果把BAT文件后缀改为EXE,则这不是一个有效的PE文件,启动NTVDM进程把文本内容当作指令进行解析。
把EXE改为BAT,同样是%1 %*,也就是直接执行的,系统加载其PE头发现是可执行文件,则系统调用CreateProcess,加载程序进入内存。
---学无止境---

TOP

本帖最后由 broly 于 2012-12-23 20:09 编辑

刚才把思路理了一下,补充6楼。

1.系统读注册表,找文件启动方式。

2.exe  bat  com是直接启动类型的。
系统加载其pe。

3.若是可执行文件也直接创建进程运行之。
若不是有效PE且后缀为bat,则创建cmd进程进行解析。
若不是有效PE且后缀为exe,则创建进程ntvdm进程进行解析。
com没有试不清楚
---学无止境---

TOP

返回列表