如何得到一个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编程技巧宝殿什么的。 不知道函数哪里错了,编译后提示如下2条错误,敬请指正. setwindowtext中如何对按钮名称设置“&” DLL内可以静态调用另一个DLL吗? 关于用MFC向导建立的单文档的问题 高分求教!com分布式系统或com的最优化的资料和书籍 求救! 请教关于COM的两个问题,每问题100分 关于在控件中调用另一个控件 openssl rsa 密钥格式 转换 怎么捕获键盘和鼠标输入 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 不好使