Lists dependencies of a PE (exe/dll) file
Project description
mingw-ldd
Lists dependencies of a PE (exe/dll) file.
Features
- Mimics ldd output
- Allows to specify dll lookup paths
- Has no hardcoded dll lookup paths
- Makes sure the dependencies are of the same CPU architecture
- Sorts the output by dll name
- Can also print per-dep or tree outputs
- Uses multiprocessing to speed up the dll lookup
Note that the arguments do not mimic ldd arguments.
Usage
The script can be installed from PyPi:
pip install mingw_ldd
mingw-ldd --help
The script can be used stanalone, given you have pefile
installed:
sudo apt-get install python3-pefile
./mingw_ldd/mingw_ldd.py --help
or:
sudo apt-get install virtualenv
virtualenv -p /usr/bin/python3 env
./env/bin/pip install -r requirements.txt
./env/bin/python3 ./mingw_ldd/mingw_ldd.py --help
The mingw_ldd.py
script file is self-contained and can be easily copied into other project's codebase.
Example
$ mingw-ldd.py -h
usage: mingw_ldd.py [-h] [--output-format {ldd-like,per-dep-list,tree}] --dll-lookup-dirs DLL_LOOKUP_DIR [DLL_LOOKUP_DIR ...] [--disable-multiprocessing] PE_FILE
Ldd-like output:
$ ./mingw-ldd.py /home/nurupo/qtox/workspace/i686/qtox/release/libtoxcore.dll \
--dll-lookup-dirs /usr/lib/gcc/i686-w64-mingw32/*-posix \
/usr/i686-w64-mingw32/lib \
/home/nurupo/qtox/workspace/i686/qtox/release
advapi32.dll => not found
iphlpapi.dll => not found
kernel32.dll => not found
libgcc_s_sjlj-1.dll => /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll
libopus-0.dll => /home/nurupo/qtox/workspace/i686/qtox/release/libopus-0.dll
libsodium-23.dll => /home/nurupo/qtox/workspace/i686/qtox/release/libsodium-23.dll
libvpx.dll => /home/nurupo/qtox/workspace/i686/qtox/release/libvpx.dll
libwinpthread-1.dll => /usr/i686-w64-mingw32/lib/libwinpthread-1.dll
msvcrt.dll => not found
user32.dll => not found
ws2_32.dll => not found
Per-dep-list output:
$ ./mingw-ldd.py /home/nurupo/qtox/workspace/i686/qtox/release/libtoxcore.dll \
--output-format per-dep-list \
--dll-lookup-dirs /usr/lib/gcc/i686-w64-mingw32/*-posix \
/usr/i686-w64-mingw32/lib \
/home/nurupo/qtox/workspace/i686/qtox/release
/home/nurupo/qtox/workspace/i686/qtox/release/libopus-0.dll
KERNEL32.dll => not found
libgcc_s_sjlj-1.dll => /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll
msvcrt.dll => not found
/home/nurupo/qtox/workspace/i686/qtox/release/libsodium-23.dll
ADVAPI32.dll => not found
KERNEL32.dll => not found
libgcc_s_sjlj-1.dll => /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll
msvcrt.dll => not found
USER32.dll => not found
/home/nurupo/qtox/workspace/i686/qtox/release/libtoxcore.dll
IPHLPAPI.DLL => not found
KERNEL32.dll => not found
libgcc_s_sjlj-1.dll => /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll
libopus-0.dll => /home/nurupo/qtox/workspace/i686/qtox/release/libopus-0.dll
libsodium-23.dll => /home/nurupo/qtox/workspace/i686/qtox/release/libsodium-23.dll
libvpx.dll => /home/nurupo/qtox/workspace/i686/qtox/release/libvpx.dll
libwinpthread-1.dll => /usr/i686-w64-mingw32/lib/libwinpthread-1.dll
msvcrt.dll => not found
WS2_32.dll => not found
/home/nurupo/qtox/workspace/i686/qtox/release/libvpx.dll
KERNEL32.dll => not found
libgcc_s_sjlj-1.dll => /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll
libwinpthread-1.dll => /usr/i686-w64-mingw32/lib/libwinpthread-1.dll
msvcrt.dll => not found
/usr/i686-w64-mingw32/lib/libwinpthread-1.dll
KERNEL32.dll => not found
msvcrt.dll => not found
/usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll
KERNEL32.dll => not found
libwinpthread-1.dll => /usr/i686-w64-mingw32/lib/libwinpthread-1.dll
msvcrt.dll => not found
Tree output:
$ ./mingw-ldd.py /home/nurupo/qtox/workspace/i686/qtox/release/libtoxcore.dll \
--output-format tree \
--dll-lookup-dirs /usr/lib/gcc/i686-w64-mingw32/*-posix \
/usr/i686-w64-mingw32/lib \
/home/nurupo/qtox/workspace/i686/qtox/release
/home/nurupo/qtox/workspace/i686/qtox/release/libtoxcore.dll
├── IPHLPAPI.DLL => not found
├── KERNEL32.dll => not found
├── libgcc_s_sjlj-1.dll => /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll
│ ├── KERNEL32.dll => not found
│ ├── libwinpthread-1.dll => /usr/i686-w64-mingw32/lib/libwinpthread-1.dll
│ │ ├── KERNEL32.dll => not found
│ │ └── msvcrt.dll => not found
│ └── msvcrt.dll => not found
├── libopus-0.dll => /home/nurupo/qtox/workspace/i686/qtox/release/libopus-0.dll
│ ├── KERNEL32.dll => not found
│ ├── libgcc_s_sjlj-1.dll => /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll
│ │ ├── KERNEL32.dll => not found
│ │ ├── libwinpthread-1.dll => /usr/i686-w64-mingw32/lib/libwinpthread-1.dll
│ │ │ ├── KERNEL32.dll => not found
│ │ │ └── msvcrt.dll => not found
│ │ └── msvcrt.dll => not found
│ └── msvcrt.dll => not found
├── libsodium-23.dll => /home/nurupo/qtox/workspace/i686/qtox/release/libsodium-23.dll
│ ├── ADVAPI32.dll => not found
│ ├── KERNEL32.dll => not found
│ ├── libgcc_s_sjlj-1.dll => /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll
│ │ ├── KERNEL32.dll => not found
│ │ ├── libwinpthread-1.dll => /usr/i686-w64-mingw32/lib/libwinpthread-1.dll
│ │ │ ├── KERNEL32.dll => not found
│ │ │ └── msvcrt.dll => not found
│ │ └── msvcrt.dll => not found
│ ├── msvcrt.dll => not found
│ └── USER32.dll => not found
├── libvpx.dll => /home/nurupo/qtox/workspace/i686/qtox/release/libvpx.dll
│ ├── KERNEL32.dll => not found
│ ├── libgcc_s_sjlj-1.dll => /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll
│ │ ├── KERNEL32.dll => not found
│ │ ├── libwinpthread-1.dll => /usr/i686-w64-mingw32/lib/libwinpthread-1.dll
│ │ │ ├── KERNEL32.dll => not found
│ │ │ └── msvcrt.dll => not found
│ │ └── msvcrt.dll => not found
│ ├── libwinpthread-1.dll => /usr/i686-w64-mingw32/lib/libwinpthread-1.dll
│ │ ├── KERNEL32.dll => not found
│ │ └── msvcrt.dll => not found
│ └── msvcrt.dll => not found
├── libwinpthread-1.dll => /usr/i686-w64-mingw32/lib/libwinpthread-1.dll
│ ├── KERNEL32.dll => not found
│ └── msvcrt.dll => not found
├── msvcrt.dll => not found
└── WS2_32.dll => not found
Performance
The performance might be a bit slower than expected due to pefile
sometimes taking up to few seconds to parse a dll.
We try to mitigate this by multiprocessing pefile's parsing.
Using the most up to date pefile
should help too.
Specifically, the current version of pefile
on PyPi -- version 2019.4.18, is noticeably faster than the version 2018.8.8 packaged in Debian Buster.
If the performance is an issue, you could give these projects a try:
- ntldd - a cross-platform ldd-like program written in C
- Dependency Walker - a freeware Windows GUI application that displays PE dependencies
Disclaimer
This project is not affiliated with MinGW, the name "mingw-ldd" is used primarely to facilitate online search discoverability as MinGW suit is missing ldd.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file mingw_ldd-0.2.1.tar.gz
.
File metadata
- Download URL: mingw_ldd-0.2.1.tar.gz
- Upload date:
- Size: 7.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3a0effe3ea246f5316b2da277e42c47877b1d9a0d6fef3a17652e432b2319fdd |
|
MD5 | ab011382425748e8c5e0f6e5d2154a21 |
|
BLAKE2b-256 | 0171abc9627a7053bbfa034448bbf07646bda49cc51551ab2382f9c0efff8163 |
File details
Details for the file mingw_ldd-0.2.1-py3-none-any.whl
.
File metadata
- Download URL: mingw_ldd-0.2.1-py3-none-any.whl
- Upload date:
- Size: 7.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1f23af86d81497324415a36c3a028dd456aaf6995b7a7f91c7486c6d82e45f81 |
|
MD5 | a8dba789758de71f024236055d8ab2f5 |
|
BLAKE2b-256 | 80cd9f817f5341effe5cf85199287c80509e10e2d35dcb87130db758ea5a25de |