- 帖子
- 881
- 积分
- 2103
- 技术
- 95
- 捐助
- 55
- 注册时间
- 2010-5-23
|
本帖最后由 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,加载程序进入内存。 |
|