23

I have several hundred DLLs belonging to a huge spaghetti-code-project and need to see which calls they export or import. And it would be also great if I would be able to get a dependency graph between DLLs. Could anyone recommend me free and reliable utilities for that?

Edit: Dependency walker seems to be not enough: I need to get a list not only for required DLLs but also to know what those DLLs are for.

ZachB
  • 13,051
  • 4
  • 61
  • 89

4 Answers4

22

Dependency Walker (depends.exe) can do that and is free. It also has a profile feature so you can see which DLLs get loaded dynamically.

depends.exe screenshot

If your DLLs are .Net assemblies you can use Reflector and if it is a COM DLL with a Type Library you can use OleView to get more information. To get more information out of a regular dll you would have to resort to disassemblers and reading assembly.

Glorfindel
  • 21,988
  • 13
  • 81
  • 109
Lars Truijens
  • 42,837
  • 6
  • 126
  • 143
  • Thank you. It is very useful when someone needs to see which modules are being called by a particular executable. But I need to solve some sort of reverse problem: I need to know what those DLLs are for. –  Jan 04 '10 at 15:01
  • It also shows the exported and imported functions from other DLLs. There isn't much more information you can get from a regular DLL. And you can load a DLL instead of an EXE if you want to. – Lars Truijens Jan 04 '10 at 16:56
  • 1
    Looks like no windows 10 support. – CraigDavid Sep 16 '21 at 22:19
6

Dependencies

Dependency Walker has some issues on Windows 10 (e.g Dependency walker hangs), there is an upgraded version of it, it is called Dependencies: https://github.com/lucasg/Dependencies It works properly on Windows 10.

Tibor Takács
  • 3,535
  • 1
  • 20
  • 23
4

http://www.ntcore.com/exsuite.php "CFF Explorer" this tool has everything you want. Read features it includes on the main page. Good luck!

faya
  • 5,535
  • 11
  • 37
  • 49
-5

There is no way to get information what DLLs are used. You have to read the software documentation of your project - hope for you that there is some. Also study the makefiles carefully.

You can only see which DLLs were included (statically - well in a different meaning then normally used) at link time but this is a subset of DLL's. It will not return any plugins or real dynamic loaded libraries.

To get this used at link time libraries you should use the "dumpbin" tool which comes with MSVC. "Dependancy walker" is just a frontend to this tool.

Then write a few scripts and/or use grep to filter the output to analyse the DLL contents.

You can search SO for other reverse engineering techniques. I believe you will find a lot of information because it is a common skill for programmers.

Lothar
  • 12,537
  • 6
  • 72
  • 121
  • Dependency walker also has runtime analyze functionality which not only shows the statically loaded dlls, but also the dynamically loaded dlls, any exceptions and paths from where they are probed and loaded. That can be useful and is not something dumpbin does. Procmon could do that though. – Lars Truijens Dec 28 '12 at 19:37
  • Yes but this will always just get you a single snapshot in time. Everyone with just a bit of engineering ethics and sense of quality will tell you that it is very dangerous to rely on this. Other then gathering an initial understanding of the system. – Lothar Feb 13 '16 at 18:00