标题: 查询、复制可执行模块DLL依赖PDLL.EXE [打印本页]
作者: happy886rr 时间: 2017-5-7 09:19 标题: 查询、复制可执行模块DLL依赖PDLL.EXE
下载链接: https://pan.baidu.com/s/1CWcoPXg889km_15G4uobdQ?pwd=1qbr
这次编译的体积只有5KB,且不依赖任何多余DLL,是同类命令行工具中功能最强,速度最快,体积最小的。
下载pdll增强版链接: https://pan.baidu.com/s/1SGHgBSC8LfmOtq7y7UHVSg?pwd=adwa
增强版携带极为强悍之功能,可在32位系统下直接查看64位exe或dll文件的依赖关系和导入导出函数表,增强版用法源码不再贴出。
版本:
PDLL.EXE VERSION 1.0 (DLLS DEPEND ON TOOL, BY HAPPY)(外链图,随时失效)
摘要:
=====================================================
PDLL.EXE 查询、复制可执行模块DLL依赖。对EXE、DLL后缀的文件均可分析DLL依赖,并
且智能的分析DLL的必需性,有选择的复制依赖DLL到被查询文件目录。已兼容XP、WIN7、
WIN8.1等WIN系统,复制的兼容性可以达到在微小WINPE系统中正常运行。 代码做了非常
严密的逻辑判断,让依赖性分析更加智能。纯C语言书写,本工具不依赖任何DLL。
=====================================================
用法:
查询DLL依赖
PDLL [要查询的可执行文件名]
复制DLL依赖
PDLL /C [要查询的可执行文件名]
演示一:
查看QQ.EXE的DLL依赖情况
演示二:
复制KERNEL32.DLL的底层API依赖
源码:- /*
- CONSOLE DLLS DEPEND ON TOOL, COPYRIGHT@2017~2019 BY HAPPY, VERSION 1.0
- PDLL.EXE
- */
-
- #include <io.h>
- #include <stdio.h>
- #include <windows.h>
-
- //定义容器安全长度
- #define _SAFE_SIZE 512
-
- //系统必需DLL列表
- static LPCSTR SYSTEM_DLLS[]= {"aclui", "activeds", "adsldpc", "advapi32", "apphelp", "atl", "authz", "basesrv", "batmeter", "cabinet", "cfgmgr32", "clb", "comdlg32", "crypt32", "cryptdll", "cryptui", "csrsrv", "devmgr", "diskcopy", "dmdlgs", "dmdskmgr", "dmdskres", "dmintf", "dmocx", "dmutil", "dnsapi", "duser", "filemgmt", "fmifs", "gdi32", "hal", "halmacpi", "hhsetup", "ifsutil", "imagehlp", "imm32", "kdcom", "kernel32", "lpk", "lsasrv", "mfc42u", "mmcbase", "mmcndmgr", "mmcshext", "mpr", "msasn1", "msimg32", "msprivs", "msv1_0", "msvcp60", "msvcrt", "msvfw32", "mycomput", "ncobjapi", "netapi32", "ntdll", "ntdsapi", "ntmarta", "odbc32", "odbcbcp", "ole32", "oleacc", "oleaccrc", "oleaut32", "oledlg", "olepro32", "osuninst", "pdh", "powrprof", "psapi", "rpcrt4", "rpcss", "rsaenh", "rshx32", "samlib", "samsrv", "scesrv", "secur32", "setupapi", "shdocvw", "shell32", "shfolder", "shlwapi", "srvsvc", "stobject", "sxs", "uexfat", "ufat", "ulib", "umpnpmgr", "untfs", "urlmon", "user32", "userenv", "usp10", "uxtheme", "version", "wimgapi", "wininet", "winmm", "winsrv", "winsta", "wintrust", "ws2_32", "wsock32", NULL};
-
- //定义帮助说明
- #define HELP_INFORMATION "\
- pdll version 1.0 - Console DLLS depend on tool - Copyright (C) 2017-2019\n\
- Usage: pdll [options] [file] ...\n\
- \n\
- General options:\n\
- List all depends on dlls name\n\
- /C Copy all depends on dlls to current file\n\
- \n\
- Official website:\n\
- http://www.bathome.net/thread-44056-1-1.html\n"
-
- //字符串转大写
- LPCSTR LPCSTR2UPR(LPCSTR instr, LPSTR ostr)
- {
- LPSTR cp=(LPSTR)instr, op=ostr;
- while(*cp)
- {
- *op=('a'<=*cp && *cp<='z')?*cp-32:*cp, cp++, op++;
- }
- *op='\0';
- return (LPCSTR)ostr;
- }
-
- //识别必需DLL
- int ItifyWords(LPCSTR strARGV)
- {
- int i, SN;
- for(SN=0; SYSTEM_DLLS[SN]; SN++)
- {
- LPSTR op=(LPSTR)strARGV, kp=(LPSTR)SYSTEM_DLLS[SN];
- while(*op!='.' && *kp!='\0')
- {
- if( (('a'<= *op && *op<='z')?*op-32:*op) != (('a'<= *kp && *kp<='z')?*kp-32:*kp) )
- {
- break;
- }
- op++, kp++;
- }
- if(*op=='.' && *kp=='\0')
- {
- return SN;
- }
- }
- return -1;
- }
-
- //获取DLL依赖
- int GetDependDlls(HMODULE hMOD, LPCSTR pePATH, BOOL peMODE)
- {
- IMAGE_DOS_HEADER* imageDosHeader = (IMAGE_DOS_HEADER*)hMOD;
- IMAGE_OPTIONAL_HEADER * imageOptionalHeader = (IMAGE_OPTIONAL_HEADER*)((BYTE*)hMOD + imageDosHeader->e_lfanew +24);
- IMAGE_IMPORT_DESCRIPTOR* imageImportDescriptor = (IMAGE_IMPORT_DESCRIPTOR*) ((BYTE*)hMOD + imageOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
-
- LPSTR srcDllPath = (LPSTR)malloc(_SAFE_SIZE);
- LPSTR copyDllPath = (LPSTR)malloc(_SAFE_SIZE);
- LPSTR touprStrTain = (LPSTR)malloc(_SAFE_SIZE);
-
- while(imageImportDescriptor->FirstThunk)
- {
- LPSTR dllNAME = (LPSTR)((BYTE*)hMOD + imageImportDescriptor->Name);
- HMODULE hdMOD = LoadLibraryExA(dllNAME, NULL, DONT_RESOLVE_DLL_REFERENCES);
-
- if(hdMOD != 0)
- {
- GetModuleFileNameA(hdMOD, srcDllPath, _SAFE_SIZE);
- }
- else
- {
- *srcDllPath='\0';
- }
-
- if(peMODE)
- {
- if(ItifyWords(dllNAME) == -1)
- {
- sprintf(copyDllPath, "%s\\%s", pePATH, dllNAME);
-
- //判断DLL是否存在,不存在则复制
- if(_access(copyDllPath, F_OK) != 0)
- {
- if(*srcDllPath && CopyFileA(srcDllPath, copyDllPath, TRUE))
- {
- fprintf(stdout, "Copy... \"%s\" succeed\n", LPCSTR2UPR(dllNAME, touprStrTain));
- }
- else
- {
- fprintf(stdout, "Copy... \"%s\" failed\n", LPCSTR2UPR(dllNAME, touprStrTain));
- }
- }
- }
- }
- else
- {
- if(strlen(dllNAME) >18)
- {
- //打印API名称
- fprintf(stdout, "%s\n", LPCSTR2UPR(dllNAME, touprStrTain));
- }
- else
- {
- //打印DLL名称
- fprintf(stdout, "%-16.16s ", LPCSTR2UPR(dllNAME, touprStrTain));
-
- //打印DLL路径
- fprintf(stderr, "%s\n", LPCSTR2UPR(srcDllPath, touprStrTain));
- }
- }
-
- FreeLibrary(hdMOD);
- imageImportDescriptor++;
- }
-
- free(srcDllPath);
- free(copyDllPath);
- free(touprStrTain);
-
- return 0;
- }
-
- //MAIN主函数入口
- int main(int argc, char* argv[])
- {
- //参数不足,抛出使用说明
- if(argc <= 1)
- {
- fputs(HELP_INFORMATION, stdout);
- return 1;
- }
-
- //获取查询模式
- BOOL pdMODE = (stricmp(argv[1], "/C")==0) ?TRUE :FALSE;
-
- //缺少必要参数,抛出错误
- if(pdMODE && argc==2)
- {
- fputs("Needs executable file\n", stdout);
- return 1;
- }
-
- //获取可执行文件名
- LPSTR peFILE = (pdMODE) ?(LPSTR)argv[2] :(LPSTR)argv[1];
-
- if(_access(peFILE, F_OK) != 0)
- {
- fprintf(stdout, "The file \"%s\" is not exists\n", peFILE);
- return 1;
- }
-
- //仅装在DLL,而不初始化
- HMODULE hMOD = LoadLibraryExA(peFILE, NULL, DONT_RESOLVE_DLL_REFERENCES);
- if(hMOD == 0)
- {
- //加载模块失败,显示错误信息
- fprintf(stderr, "Failed to load executable file \"%s\"\n", peFILE);
- return 2;
- }
-
- //获取可执行文件路径
- LPSTR lp = strrchr(peFILE, '\\');
- LPSTR pePATH = (lp==NULL) ?(LPSTR)".\\" :(*lp='\0', peFILE);
-
- //打印可执行文件名
- //fprintf(stderr, "File Name: %s\n", peFILE);
-
- //执行DLL依赖查询
- GetDependDlls(hMOD, pePATH, pdMODE);
-
- //释放装载模块
- FreeLibrary(hMOD);
-
- return 0;
- }
复制代码
作者: yu2n 时间: 2017-5-7 10:42
楼主为何不把编译好的 exe 放上来呢?
之前用过类似的,需要结合批处理编程才能复制DLL,且需要对 64 位 与 32 位 WINPE 系统下分别复制两份 DLL(系统)。
比如 CHKDSK.EXE ,有些 PE 没有,想要用就得复制 DLL。如果是 WIN7 版本的 CHKDSK.EXE ,相关的 DLL还不少。
作者: happy886rr 时间: 2017-5-7 11:12
本帖最后由 happy886rr 于 2017-5-7 11:30 编辑
回复 2# yu2n
又修复几个bug,已经编译上传附件,只有5KB的DLL依赖查询复制器。
代码里有个系统必需DLL列表,那个列表是构成一个winPE,最小的DLL集合。兼容xp、win7、win8.1、win10。
你只要按照那个列表复制DLL,得到的winPE才是最稳定的。还有做PE可以用红木婴毛的自动化PE生产工具,只需要设置几个参数,就会从系统复制文件生成一个可上网的winPE。不过我更喜欢纯CMD的PE,速度快,体积小,自己添加上多种笔记本驱动就能用手机引导任何一台电脑。
作者: CrLf 时间: 2017-5-7 11:36
回复 3# happy886rr
棒棒哒!
作者: happy886rr 时间: 2017-5-7 11:45
回复 4# CrLf
dlls更棒,直接就是rar包,原来你的第三方都实现了自动化处理,顺藤摸瓜就写了这个。
作者: freesoft00 时间: 2017-5-7 12:06
本帖最后由 freesoft00 于 2017-5-7 12:09 编辑
很实用。
说实话,作者搞的图形什么的小程序好是好,但是对像我这样的初级使用者没有太大的需要性。
而向楼上这类软件更具有实用性。
谢谢分享!
作者: freesoft00 时间: 2017-5-7 12:25
本帖最后由 freesoft00 于 2017-5-7 12:56 编辑
马上测试了一下。说一下测试结果。
例如
PDLL c:\windows\explorer.exe
这样的命令正确
如果我在win7 32位系统,分析64位系统使用的explorer.exe,把这个explorer.exe复制到pdll同目录,执行
PDLL explorer.exe
这样就出错了。无法分析出来。
不知道是否有办法分析非当前系统内的exe和dll。或者可以指定要分析的exe、dll所依赖的系统目录。
例如d:\mount里面是加载的win10系统的所有文件根目录
pdll d:\mount\windows\explorer.exe /s d:\mount
例如用/s指定要分析的系统所在目录。(ldd32.exe这个程序不需要指定,直接可以分析非当前系统的exe、dll依赖文件)
ldd32.exe分析非当前系统都是这样的文件名称列表,没有具体的路径。- KERNEL32.dll
- USER32.dll
- GDI32.dll
- SHCORE.dll
- SHLWAPI.dll
- SHELL32.dll
- UxTheme.dll
- dwmapi.dll
- TWINAPI.dll
- d3d11.dll
- dcomp.dll
- api-ms-win-core-localization-l1-2-1.dll
- api-ms-win-core-path-l1-1-0.dll
复制代码
第二:
PDLL /c c:\windows\explorer.exe
复制文件会复制到c:\windows里面。这样不好,是否可以指定要复制到哪里?
另外可以指定都复制到一个文件夹中,还是可以按目录结构复制(没有的目录创建)
第三:
网上有一个开源的ldd,是vc编译的,原来在谷歌的代码托管处存放,现在不知道还有没有了。主要是国内登录不方便。
那个可以批量执行程序分析,例如
ldd "%windir%\System32\*.exe">winexe.txt
这样会把system32目录所有的exe都分析处理,内容类似这样:- C:\Windows\system32\AdapterTroubleshooter.exe
- KERNEL32.dll => C:\Windows\system32\kernel32.dll
- USER32.dll => C:\Windows\system32\USER32.dll
- d3d9.dll => C:\Windows\system32\d3d9.dll
- msvcrt.dll => C:\Windows\system32\msvcrt.dll
- ntdll.dll => C:\Windows\SYSTEM32\ntdll.dll
- C:\Windows\system32\aitagent.exe
- ADVAPI32.dll => C:\Windows\system32\ADVAPI32.dll
- AEPIC.dll => C:\Windows\system32\AEPIC.dll
- KERNEL32.dll => C:\Windows\system32\kernel32.dll
- OLEAUT32.dll => C:\Windows\system32\OLEAUT32.dll
- msvcrt.dll => C:\Windows\system32\msvcrt.dll
- ntdll.dll => C:\Windows\SYSTEM32\ntdll.dll
- ole32.dll => C:\Windows\system32\ole32.dll
- profapi.dll => C:\Windows\system32\profapi.dll
- sfc.dll => C:\Windows\system32\sfc.dll
- C:\Windows\system32\aitstatic.exe
- ADVAPI32.dll => C:\Windows\system32\ADVAPI32.dll
- KERNEL32.dll => C:\Windows\system32\kernel32.dll
- OLEAUT32.dll => C:\Windows\system32\OLEAUT32.dll
- SHLWAPI.dll => C:\Windows\system32\SHLWAPI.dll
- mscoree.dll => C:\Windows\system32\mscoree.dll
- msvcrt.dll => C:\Windows\system32\msvcrt.dll
- ntdll.dll => C:\Windows\SYSTEM32\ntdll.dll
- ole32.dll => C:\Windows\system32\ole32.dll
复制代码
不好意思,这个第三点是我记错了,因为是看原来的批处理反馈的,再测试发现ldd "%windir%\System32\*.exe"不行,需要通过for遍历exe然后被ldd分析。
第四:
分析结果是否可以指定输出内容,例如只显示依赖的文件列表msvcrt.dll、只显示完成路径列表C:\Windows\system32\msvcrt.dll、完整显示。要不重定向后的txt列表还需要批处理再截取。
其它再测试后反馈。
作者: 523066680 时间: 2017-5-7 12:47
楼主用批处理写图形主要是情怀,是娱乐。
反正happy大大在实用方面也没落下,娱乐实用两不误。
作者: freesoft00 时间: 2017-5-7 13:04
imdisk的作者网站的东西,大部分都是开源的,不知道兄弟是否需要。作者的开源文件地址
http://www.ltr-data.se/files/source.7z
作者: happy886rr 时间: 2017-5-7 15:05
本帖最后由 happy886rr 于 2017-5-7 15:24 编辑
回复 6# freesoft00
1.除了depends22_x86.exe软件可以分析之外,在任何32位系统下,命令行无法分析64位的exe。你的ldd32.exe可否提供一下,我测测在32位系统下是否真能分析64位程序。
2.PDLL并不是复制到c:\windows下,因为你的命令是PDLL /c c:\windows\explorer.exe,其中/C就代表复制,你后边给的路径就是c:\windows\,它是按你给的路径复制DLL的。本身就支持指定复制路径,但是你给的路径就是c:\windows\。
3.批量可以借助批处理for %a in (*.exe) do (PDLL %a)实现,因为本身就是命令行,是方便批处理调用的。
4.我用了fprintf函数,对DLL名称是直接放到标准输出(stdout)也就是 1>NUL中的1,对DLL路径是直接放到标准错误输出(stderr)也就是2>NUL中的2.你直接把顶楼代码用tcc编译下,就行。
因此你直接PDLL test.exe 1> OUT.TXT,PDLL test.exe 2> OUT.TXT, PDLL test.exe > OUT.TXT就实现了这些要求。- REM 标准正确输出流,实现只列出路径
- E:\TEST>pdll pdll.exe 2>NUL
- C:\WINDOWS\SYSTEM32\MSVCRT.DLL
- C:\WINDOWS\SYSTEM32\KERNEL32.DLL
-
- REM 标准错误输出流,实现只列出DLL名称
- E:\TEST>pdll pdll.exe 1>NUL
- MSVCRT.DLL KERNEL32.DLL
-
- REM 标准全输出流,实现全部列出
- E:\TEST>pdll pdll.exe
- MSVCRT.DLL C:\WINDOWS\SYSTEM32\MSVCRT.DLL
- KERNEL32.DLL C:\WINDOWS\SYSTEM32\KERNEL32.DLL
复制代码
因此PDLL暂时无需更新,已经足够用了。
作者: freesoft00 时间: 2017-5-7 16:22
回复 10# happy886rr
https://pan.baidu.com/s/1c1XfLs
作者: freesoft00 时间: 2017-5-7 17:45
2.PDLL并不是复制到c:\windows下,因为你的命令是PDLL /c c:\windows\explorer.exe,其中/C就代表复制,你后边给的路径就是c:\windows\,它是按你给的路径复制DLL的。本身就支持指定复制路径,但是你给的路径就是c:\windows\。
pdll c:\windows\explorer.exe
pdll /c c:\windows\explorer.exe
这样确实会复制到c:\windows目录。后面的我给的是explorer.exe的具体路径。
如果这样不对,正确的应该如何写呢?
pdll /c c:\windows\explorer.exe d:\str
pdll /c d:\str c:\windows\explorer.exe
pdll /c explorer.exe
都不对呀
除非我把explorer.exe复制到和pdll相同的目录,执行
PDLL /c explorer.exe d:\str
这样好像并不太好,要分析的文件不能写完整路径,只能是文件名而且这就需要其和pdll在一个目录。
另外,
pdll c:\windows\explorer.exe显示的和加/c参数复制的dll文件数量不一样,是怎么回事呢?
作者: happy886rr 时间: 2017-5-7 17:56
回复 12# freesoft00
你把explorer.exe放D盘,然后- pdll /C D:\test\explorer.exe
复制代码
就可以了,直接复制到 D:\test\文件夹里。至于复制的跟显示的不一样,那是因为有些dll是每个系统都有的,比如kernel32.dll就没必要复制啊,因为每个能开机的系统都带这个,没这个你都不开机的。
还有你的ldd32.exe在哪下载的,能否提供网站,我去看看那个老外的代码怎么实现的。
作者: freesoft00 时间: 2017-5-7 19:00
本帖最后由 freesoft00 于 2017-5-7 19:14 编辑
ldd的网址在这个帖子,ldd也是可以分析64位的程序依存的
http://www.bathome.net/viewthread.php?tid=19843&highlight=ldd
ldd32.exe的我也不知道。这类使用少的软件资源不好找。
我下载了一份源代码:
https://pan.baidu.com/s/1mi2YGDa
密码xk8i
作者: happy886rr 时间: 2017-5-7 19:11
回复 14# freesoft00
你这个ldd32哪弄的,关键是就这个牛啊,论坛第三方都没收录你这个版本,我试了下,你这个版本是体积最大,也是直接能在32位系统分析64位dll的版本,估计可能用了汇编吧,内部强制加载64位dll,这个我还在反汇编研究中,要是有ldd32的源码就好了。
作者: freesoft00 时间: 2017-5-7 19:17
本帖最后由 freesoft00 于 2017-5-7 19:18 编辑
回复 15# happy886rr
无忧论坛那个制作pe的包里面有这个小程序,最初的出处我也忘记了。
http://bbs.wuyou.net/forum.php?m ... 58&fromuid=1345
在Projects\Tools\MYTOOLS目录中
上面我传了ldd的源码
作者: freesoft00 时间: 2017-5-7 19:40
还是需要复制待分析文件的,如果要批量分析system32目录内的所有exe,不可能把所有文件都复制到D盘。
作者: happy886rr 时间: 2017-5-7 21:00
本帖最后由 happy886rr 于 2017-5-7 21:05 编辑
回复 17# freesoft00
system32的文件太多了,你分析那个目录会很卡的。
要的是无忧启动那个ldd32.exe的源码,那个才有研究价值。哦,我想起来了,那个是winbuilder的自带工具把,应该去winbuilder官方下载源码。,做winPE就需要脱离操作系统位数去查找DLL依赖,只有winbuilder有这个源码。
作者: freesoft00 时间: 2017-5-7 22:11
回复 18# happy886rr
源代码找到了。我私信给你吧。
作者: happy886rr 时间: 2017-5-7 22:58
回复 19# freesoft00
他就是传说中的红毛樱木,这个人技术很厉害。
作者: happy886rr 时间: 2017-5-11 20:42
回复 19# freesoft00
pdll以更新到增强版2.0,请在一楼链接中下载。对于从指定源复制dll,完全可以用批处理的for去实现。pdl增强版对64位的dll做了兼容,可以直接在32位系统,查看64位dll。请使用/I 开关查看。
作者: happy886rr 时间: 2017-5-11 20:44
回复 4# CrLf
pdll已更新到增强版2.0,请在一楼链接中下载,对64位的dll做了兼容,可以直接在32位系统,查看64位dll。并增加了对dll导入、导出表的查看,包括函数地址显示。
作者: 523066680 时间: 2017-5-11 20:52
回复 20# happy886rr
红毛樱木这个名字我之前以为是某种树木,今天想想,樱木花道的头发是红色的,所以是红毛樱木,哈哈。
作者: happy886rr 时间: 2017-5-11 21:36
回复 23# 523066680
作者: freesoft00 时间: 2017-5-11 22:41
回复 24# happy886rr
针对64位的dll依存还是不行。
测试系统win7 32位,测试文件win8.1 64位的explorer.exe文件。
新版本提示错误,无法运行,而ldd32没有问题。
作者: happy886rr 时间: 2017-5-11 22:53
本帖最后由 happy886rr 于 2017-5-11 22:55 编辑
回复 25# freesoft00
请使用/I 开关查看。
PDLL /I 文件名
因为是增强版,你不加/I开关还是默认引擎,加了/I开关就是超级引擎。
PDLL增强版,不仅包括了ldd32的全部代码,还新增200行新代码,用于改善性能,你看帮助信息,用法已经不同于之前的了。
作者: freesoft00 时间: 2017-5-11 23:07
回复 26# happy886rr
还是不行呀。有错误。
作者: CrLf 时间: 2017-5-12 00:02
回复 26# happy886rr
用 64 位 7z 做测试,也是用不了
不加 /i 运行报错
Failed to load executable file "Z:\7z64.exe"
加 /i 停止工作
所用 7z 程序:http://www.bathome.net/s/tool/?key=7z64
作者: happy886rr 时间: 2017-5-12 10:45
回复 27# freesoft00
已经修复,请在一楼重新下载增强版。
作者: happy886rr 时间: 2017-5-12 10:45
回复 28# CrLf
已修复,直接PDLL 7Z64.exe即可。
作者: CrLf 时间: 2017-5-12 12:31
By the way, Powershell 也可以查看 dll:- Start-Process -PassThru calc.exe | Get-Process -Module
复制代码
和 tasklist /m 差不多,但 tasklist 不能保证百分百命中
这个用法得先打开进程
好处是炒鸡全面,可以看到系统自动引用的 dll,以及进程在运行中动态加载的 dll
用途不同,马克一下
作者: happy886rr 时间: 2017-5-12 12:51
回复 31# CrLf
不错,不过没RVA地址,直接pdll /i calc.exe连用了哪个库的什么函数都能列出来,包括编号、虚拟地址。不过vs的调试工具,或者peid也带了这项功能。
作者: CrLf 时间: 2017-5-12 14:34
本帖最后由 CrLf 于 2017-5-12 14:36 编辑
回复 32# happy886rr
pdll.exe C:\WINDOWS\System32\calc.exe
得到结果:
SHELL32.DLL FROM C:\WINDOWS\SYSTEM32\SHELL32.DLL
KERNEL32.DLL FROM C:\WINDOWS\SYSTEM32\KERNEL32.DLL
MSVCRT.DLL FROM C:\WINDOWS\SYSTEM32\MSVCRT.DLL
ADVAPI32.DLL FROM C:\WINDOWS\SYSTEM32\ADVAPI32.DLL
API-MS-WIN-CORE-WINRT-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ERROR-L1-1-1.DLL
API-MS-WIN-CORE-SYNCH-L1-2-0.DLL
API-MS-WIN-CORE-PROCESSTHREADS-L1-1-2.DLL
API-MS-WIN-CORE-LIBRARYLOADER-L1-2-0.DLL
话说最后那几个 dll 是啥,全盘搜索都没有...
居然不影响运行
作者: happy886rr 时间: 2017-5-12 16:48
本帖最后由 happy886rr 于 2017-5-12 16:50 编辑
回复 33# CrLf
最后那几个,我估计是软链接吧。但是我的win7提示的dll跟你的不一样。
pdll.exe C:\WINDOWS\System32\calc.exe- SHELL32.DLL FROM C:\WINDOWS\SYSTEM32\SHELL32.DLL
- SHLWAPI.DLL FROM C:\WINDOWS\SYSTEM32\SHLWAPI.DLL
- GDIPLUS.DLL FROM C:\WINDOWS\WINSXS\X86_MICROSOFT.WINDOWS.GDIPLUS_6595B64144CCF1DF_1.1.7601.19061_NONE_72D6D48D86649709\GDIPLUS.DLL
- ADVAPI32.DLL FROM C:\WINDOWS\SYSTEM32\ADVAPI32.DLL
- OLEAUT32.DLL FROM C:\WINDOWS\SYSTEM32\OLEAUT32.DLL
- UXTHEME.DLL FROM C:\WINDOWS\SYSTEM32\UXTHEME.DLL
- OLE32.DLL FROM C:\WINDOWS\SYSTEM32\OLE32.DLL
- COMCTL32.DLL FROM C:\WINDOWS\WINSXS\X86_MICROSOFT.WINDOWS.COMMON-CONTROLS_6595B64144CCF1DF_5.82.7601.18837_NONE_EC86B8D6858EC0BC\COMCTL32.DLL
- NTDLL.DLL FROM C:\WINDOWS\SYSTEM32\NTDLL.DLL
- KERNEL32.DLL FROM C:\WINDOWS\SYSTEM32\KERNEL32.DLL
- USER32.DLL FROM C:\WINDOWS\SYSTEM32\USER32.DLL
- RPCRT4.DLL FROM C:\WINDOWS\SYSTEM32\RPCRT4.DLL
- WINMM.DLL FROM C:\WINDOWS\SYSTEM32\WINMM.DLL
- VERSION.DLL FROM C:\WINDOWS\SYSTEM32\VERSION.DLL
- GDI32.DLL FROM C:\WINDOWS\SYSTEM32\GDI32.DLL
- MSVCRT.DLL FROM C:\WINDOWS\SYSTEM32\MSVCRT.DLL
复制代码
作者: CrLf 时间: 2017-5-12 17:03
回复 34# happy886rr
噢,我是win10,那个是磁贴应用
作者: freesoft00 时间: 2017-5-21 22:46
回复 29# happy886rr
用你的源代码,使用你做的精简的vc编译通过,测试了ping2.exe的依存,因为它需要vc++运行库,系统中没有会弹出错误。
而你一楼给的编译好的pdll就没有问题。可以正确获取依存列表
作者: happy886rr 时间: 2017-5-21 22:51
回复 36# freesoft00
那个编译器是VS里的,把/MD改为/MT就是会生成不依赖任何dll的单文件exe。
作者: freesoft00 时间: 2017-5-21 22:53
回复 37# happy886rr
这个也ok了。
作者: happy886rr 时间: 2017-5-21 22:55
回复 38# freesoft00
我的代码几乎都能用那个vc++2010精简版编译出来,参数、细节你都可以自己修改,从而调配出最佳的exe。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |