我找了这个问题,在网站,但它看起来像它从来没有被问,所以我想我会分享答案给任何人寻找它。
问:当我输入输入cmd.exe可执行文件的名称,通过壳执行功能或从一个批处理文件,如何查找Windows被称为外部的可执行文件?
我找了这个问题,在网站,但它看起来像它从来没有被问,所以我想我会分享答案给任何人寻找它。
问:当我输入输入cmd.exe可执行文件的名称,通过壳执行功能或从一个批处理文件,如何查找Windows被称为外部的可执行文件?
我不明白什么是“壳执行功能”指的是,所以我会忽略它。
但用于启动可执行从CMD.EXE命令行,或从一个批处理文件的规则如下:
如果为可执行(绝对或相对)被指定的路径,则只有该路径被搜索。
如果只指定可执行文件的名称(以及可能的扩展名),然后
首先搜索当前文件夹
然后搜索在PATH环境变量中的文件夹(在列出的顺序)
在每个文件夹中搜索,使用所提供的扩展。 如果没有提供文件扩展名,然后寻找匹配,在PATHEXT环境变量中发现的扩展(按顺序列出)的文件。
找到的第一个匹配的文件是被执行的一个。
编辑
大卫糖果已经向我指出一些过时的NT文档能精确勾勒出的搜索过程,它基本上是匹配上面我所编写的。 见启动从NT外壳应用
我喜欢它,如果任何人都可以发布链接到类似的CMD.EXE文档较新版本的Windows中,尤其是如果它是由微软。 需要注意的是上面链接的文档NT 不是由微软写的,即使它被张贴在他们的网站上。
下面是使用CreateProcessW开始edit.com CMD的调试。
Microsoft (R) Windows Debugger Version 6.2.9200.20512 X86
Copyright (c) Microsoft Corporation. All rights reserved.
CommandLine: C:\Windows\System32\cmd.exe
Symbol search path is: srv*C:\tmp*http://msdl.microsoft.com/download/symbols;c:\tmp
Executable search path is:
ModLoad: 49fe0000 4a030000 cmd.exe
ModLoad: 76dd0000 76ef7000 ntdll.dll
ModLoad: 75860000 7593b000 C:\Windows\system32\kernel32.dll
ModLoad: 76a20000 76ae6000 C:\Windows\system32\ADVAPI32.dll
ModLoad: 76d00000 76dc2000 C:\Windows\system32\RPCRT4.dll
ModLoad: 75b20000 75bca000 C:\Windows\system32\msvcrt.dll
(58c.918): Break instruction exception - code 80000003 (first chance)
*** ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll -
eax=00000000 ebx=00000000 ecx=0027f9a0 edx=76e29a94 esi=fffffffe edi=76e2b6f8
eip=76e17dfe esp=0027f9b8 ebp=0027f9e8 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
ntdll!DbgBreakPoint:
76e17dfe cc int 3
0:000> bp kernel32!CreateProcessW
*** ERROR: Symbol file could not be found. Defaulted to export symbols for C:\Windows\system32\kernel32.dll -
breakpoint 0 redefined
0:000> g
Breakpoint 0 hit
eax=0027f590 ebx=00000000 ecx=00000000 edx=00000000 esi=4a005200 edi=00000001
eip=75861c01 esp=0027f4b4 ebp=0027f674 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
kernel32!CreateProcessW:
75861c01 8bff mov edi,edi
0:000> kb
ChildEBP RetAddr Args to Child
WARNING: Stack unwind information not available. Following frames may be wrong.
0027f4b0 49fe4568 00316078 003175a8 00000000 kernel32!CreateProcessW
0027f674 49fe4315 00317508 00000000 00000000 cmd!ExecPgm+0x20a
0027f8d4 49fe43a8 00317508 00000000 00000000 cmd!ECWork+0x7f
0027f8ec 49fe43ce 00317508 e3a3ec47 00000001 cmd!ExtCom+0x47
0027fd48 49fe185f 00317508 00000002 7588372f cmd!FindFixAndRun+0xb3
0027fd98 49ff70d4 00000000 00317508 4a0041b0 cmd!Dispatch+0x14a
0027fddc 49fe985b 00000001 000a0f38 000a1840 cmd!main+0x21a
0027fe20 758a4911 7ffdb000 0027fe6c 76e0e4b6 cmd!_initterm_e+0x163
0027fe2c 76e0e4b6 7ffdb000 7871d1d4 00000000 kernel32!BaseThreadInitThunk+0x12
0027fe6c 76e0e489 49fe9797 7ffdb000 00000000 ntdll!RtlInitializeExceptionChain+0x63
0027fe84 00000000 49fe9797 7ffdb000 00000000 ntdll!RtlInitializeExceptionChain+0x36
0:000> du 316078
00316078 "C:\Windows\system32\edit.com"
见CreateProcess的。