如何得到一个EXE(或Dll)隐式依赖的Dll名称(含路径)列表? 如题。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就是用Depends工具看到的那个列表。 http://www.pudn.com/downloads40/sourcecode/windows/system/detail135813.html 你的项目->属性->配置属性->链接器->命令行那里包含部分dll文件和相应路径。 另外编译后,debug,在“输出”视图也会显示dll和他的路径 用Depends看么,觉得不爽,用代码遍历PE结构,找IAT也不反对 用Depends这个工具查看一下EXE文件,列表中的文件都是依赖的啊 你的问题需要解析PE格式文件.网上有很多讲PE文件格式知识的,但可能提供可靠代码的比较少.下面是我的博客的链接,里面的类就是解析PE文件的.如果该PE文件不在内存,你需要把PE文件用LoadLibrary加载进内存,然后构造KPEFile类的对象.http://hi.baidu.com/chendeping/blog/item/c8e87d178b8218034a90a773.html你把里面的这个函数略作修改,就可以得到该PE文件直接依赖的DLL,间接依赖的需要递归.PIMAGE_IMPORT_DESCRIPTOR KPEFile::GetImportDescriptor( LPCSTR pDllName){ // first IMAGE_IMPORT_DESCRIPTOR PIMAGE_IMPORT_DESCRIPTOR pImport = (PIMAGE_IMPORT_DESCRIPTOR) GetDirectory(IMAGE_DIRECTORY_ENTRY_IMPORT); if ( pImport==NULL ) return NULL; while ( pImport->FirstThunk ) { if ( stricmp(pDllName, RVA2Ptr(pImport->Name))==0 ) return pImport; // move to next imported module pImport ++; } return NULL;}这个函数本来就简单,你自己改吧. 放心,EXE也是照样可以LoadLibrary进内存的.不要害怕.呵呵. 就是这个啦http://www.pudn.com/downloads40/sourcecode/windows/system/detail135813.html 分析PE格式,读取导入表,里面就有EXE(DLL)导入的dll名称,不过没有记录路径,系统LoadLibrary时会在一些路径下查找dll,可以生成这些路径,然后判断对应路径dll是否存在来得到dll的路径。 当这个目标程序正在运行的时候倒是好办,像很多进程管理那样,枚举他用到的 dll,这个可行.要是他没运行,仅仅是个 PE 在磁盘上,俺没辄了....还有楼上各位兄弟说的什么 depends 之类,应该都只能对静态的管用,动态的 LoadLibrary 不好使 这个有很多这样的例子啊,很多VC的参考书上就有的。我至少知道两本书上有,WIN核心编程(是在一个远程线程注入中的一段)和一本VC编程技巧宝殿什么的。 如何实现dll导入静态lib(不是调用) 客户端异常断开或开几个连接的时候,IOCP服务端死掉,为何? 怎么样从一个DocTemplate中访问别的DocTemplate中的数据. 有关滚动条的问题 怎么在vc中编写实现txt和doc文档的打开和浏览 请问:读取位图后,滚动视图,但位图并不滚动。什么原因,如何解决? 请问CWND类中函数OnActivate和OnActivateApp的具体作用,详细点好吗?谢谢 关于字符串的问题,别骂我!! 哪有 OCT 2001 或以后的MSDN下载? 请问如何将SDI转变为MDI 100分求两个问题 有关dll的高手来啊
那里包含部分dll文件和相应路径。
下面是我的博客的链接,里面的类就是解析PE文件的.
如果该PE文件不在内存,你需要把PE文件用LoadLibrary加载进内存,然后构造KPEFile类的对象.
http://hi.baidu.com/chendeping/blog/item/c8e87d178b8218034a90a773.html
你把里面的这个函数略作修改,就可以得到该PE文件直接依赖的DLL,间接依赖的需要递归.
PIMAGE_IMPORT_DESCRIPTOR KPEFile::GetImportDescriptor(
LPCSTR pDllName)
{
// first IMAGE_IMPORT_DESCRIPTOR
PIMAGE_IMPORT_DESCRIPTOR pImport = (PIMAGE_IMPORT_DESCRIPTOR)
GetDirectory(IMAGE_DIRECTORY_ENTRY_IMPORT);
if ( pImport==NULL )
return NULL; while ( pImport->FirstThunk )
{
if ( stricmp(pDllName, RVA2Ptr(pImport->Name))==0 )
return pImport; // move to next imported module
pImport ++;
} return NULL;
}
这个函数本来就简单,你自己改吧.
http://www.pudn.com/downloads40/sourcecode/windows/system/detail135813.html
要是他没运行,仅仅是个 PE 在磁盘上,俺没辄了....还有楼上各位兄弟说的什么 depends 之类,应该都只能对静态的管用,动态的 LoadLibrary 不好使