diff options
author | dec05eba <dec05eba@protonmail.com> | 2018-10-05 07:15:55 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2020-07-06 07:39:33 +0200 |
commit | 45e00fd7c7695adb9d69e8621ab76fdfa085900b (patch) | |
tree | 167d2a660db7bc4bdc199a438b8255ffc8b45cca /scripts/mingw_ldd.py | |
parent | 5250cb90406693163763a214af95f670e0e3a4e0 (diff) |
Fix for windows & mingw
Diffstat (limited to 'scripts/mingw_ldd.py')
-rwxr-xr-x | scripts/mingw_ldd.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/scripts/mingw_ldd.py b/scripts/mingw_ldd.py new file mode 100755 index 0000000..f678176 --- /dev/null +++ b/scripts/mingw_ldd.py @@ -0,0 +1,54 @@ +#!/usr/bin/env python +# WTFPL - Do What the Fuck You Want to Public License +from __future__ import print_function +import pefile +import os +import sys + + +def get_dependency(filename): + deps = [] + pe = pefile.PE(filename) + for imp in pe.DIRECTORY_ENTRY_IMPORT: + deps.append(imp.dll.decode()) + return deps + + +def dep_tree(root, prefix=None): + if not prefix: + arch = get_arch(root) + #print('Arch =', arch) + prefix = '/usr/'+arch+'-w64-mingw32/bin' + #print('Using default prefix', prefix) + dep_dlls = dict() + + def dep_tree_impl(root, prefix): + for dll in get_dependency(root): + if dll in dep_dlls: + continue + full_path = os.path.join(prefix, dll) + if os.path.exists(full_path): + dep_dlls[dll] = full_path + dep_tree_impl(full_path, prefix=prefix) + else: + dep_dlls[dll] = 'not found' + + dep_tree_impl(root, prefix) + return (dep_dlls) + + +def get_arch(filename): + type2arch= {pefile.OPTIONAL_HEADER_MAGIC_PE: 'i686', + pefile.OPTIONAL_HEADER_MAGIC_PE_PLUS: 'x86_64'} + pe = pefile.PE(filename) + try: + return type2arch[pe.PE_TYPE] + except KeyError: + sys.stderr.write('Error: unknown architecture') + sys.exit(1) + +if __name__ == '__main__': + filename = sys.argv[1] + for dll, full_path in dep_tree(filename).items(): + print(' ' * 7, dll, '=>', full_path) + |