获取pe文件依赖dll文件所在存储路径

fengcy36 2015-04-28 03:56:46
现在可以读取pe文件的依赖的dll名字,但是不清楚改如何获取dll的存储路径
...全文
878 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
marslycan 2017-10-17
  • 打赏
  • 举报
回复
我也在写这个。。。
clever101 2016-05-19
  • 打赏
  • 举报
回复
问题是Dependency Walker 工具是怎么实现显示全路径的呢?
CCED136 2015-05-08
  • 打赏
  • 举报
回复
引用 6 楼 u011938471 的回复:
[quote=引用 4 楼 sxsfeq 的回复:] 如果不是在程序运行中的话, 可以使用微软的 Dependency Walker 工具, 菜单选View->Full Paths就能看到依赖的DLL路径. 不过好像并不能显示全部的依赖, 如DLL调用DLL多层调用就不行了.
不好意思,我是要写个程序,运行,得到任意pe文件依赖的dll存储目录[/quote] 这么说:如果一个EXE程序正在运行, 那么是可以获得这个 EXE 程序当前调用的所有 DLL 文件的映像文件名称。这个通过进程快照然后遍历所有模块,并获取模块句柄,然后找到模块映像文件名称即可。 但是,如果一个EXE并没有运行,而是仅仅存放在磁盘某个目录中, 你要找到这个EXE所有依赖的DLL文件名称, 那么只能使用之前回复中提到的方法。并且,确实可能出现某个DLL存在于多个目录中的情况,只能优先按照PE加载目录路径的顺序选择了。
fengcy36 2015-05-04
  • 打赏
  • 举报
回复
引用 4 楼 sxsfeq 的回复:
如果不是在程序运行中的话, 可以使用微软的 Dependency Walker 工具, 菜单选View->Full Paths就能看到依赖的DLL路径. 不过好像并不能显示全部的依赖, 如DLL调用DLL多层调用就不行了.
不好意思,我是要写个程序,运行,得到任意pe文件依赖的dll存储目录
fengcy36 2015-05-04
  • 打赏
  • 举报
回复
引用 2 楼 CCED136 的回复:
如果要自己查找 DLL 路径, 和查找其他“仅知道文件名称”文件的查看方法是一样的, 可以遍历所有磁盘目录。 当然,假如 DLL 在系统搜索路径中, 也可以使用 LoadLibrary 函数来直接载入这个 DLL, 然后再根据这个 dll 的模块句柄来 GetModeFileName
遍历磁盘效率太慢,而且依赖的dll在系统磁盘里同一个名字可能会有多个不同的目录
飞翔的哈皮 2015-05-03
  • 打赏
  • 举报
回复
如果不是在程序运行中的话, 可以使用微软的 Dependency Walker 工具, 菜单选View->Full Paths就能看到依赖的DLL路径.
不过好像并不能显示全部的依赖, 如DLL调用DLL多层调用就不行了.
CCED136 2015-04-29
  • 打赏
  • 举报
回复
GetModuleFileNam
CCED136 2015-04-29
  • 打赏
  • 举报
回复
如果要自己查找 DLL 路径, 和查找其他“仅知道文件名称”文件的查看方法是一样的, 可以遍历所有磁盘目录。 当然,假如 DLL 在系统搜索路径中, 也可以使用 LoadLibrary 函数来直接载入这个 DLL, 然后再根据这个 dll 的模块句柄来 GetModeFileName
CCED136 2015-04-29
  • 打赏
  • 举报
回复
目前, PE 格式的程序文件中, 仅包含了依赖 DLL 的文件名称, 但不包含该 DLL 的路径。 通常情况下, WINDOWS 查找 DLL 的顺序为, 1、EXE 程序所在目录。 2、System32 3、PATH 指明的搜索路径。 具体的可以查看 LoadLibrary API 相关的 MSDN 说明。

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧