fts_depends - Windows Dependency Checker

October 15th, 2022

If you've done any Windows development then you've likely run into issues with missing dlls. Windows is particularly annoying because if a transitive dependency fails to load you don't get a helpful error message. The whole process is confusing and frustrating.

A common debugging tool is Dependency Walker. It's functional but excruciatingly slow. This week I ran into a problem and it took 20 minutes to run. 😲 Another option is to use dumpbin.exe /DEPENDENTS. It's fast, but it isn't recursive.

Unhappy with the solution space I used Rust to quickly bang out a replacement tool.

GitHub: fts_depends

fts_depends

fts_depends.exe is a Rust command line tool. It invokes dumpbin.exe and parses the text output. Then it makes a best effort to identify where that library will be loaded from and repeats the process.

Here's an example of what it looks like.

Monkey Island, dependencies table

It can also print a tree view.

Monkey Island, dependencies tree

If a dependency is not found it's displayed with a helpful ⚠️ symbol.

Monkey Island, missing dependency

Default behavior ignores "system libraries" that live in Windows\system32, or begin with either api-ms-win or ext-ms-win.

fts_depends.exe tool does NOT actually load any libraries. This makes it very fast, but imperfect. Binary location is guesstimated via the which crate. It will not pick up search paths added by executables or launcher scripts.

This tool also won't pickup dependencies that are programmatically loaded at runtime. However the intent of this tool is to quickly debug why programs or modules fail to load.

Conclusion

That's it. I regularly have issues with missing DLLs. The most common Windows tools did not satisfy me. It took probably 4 hours to write a tool that better meets my needs.

GitHub: fts_depends
Cargo: cargo install fts_depends