{"id":20128265,"url":"https://github.com/nurupo/mingw-ldd","last_synced_at":"2026-03-13T21:36:13.382Z","repository":{"id":57441727,"uuid":"268200500","full_name":"nurupo/mingw-ldd","owner":"nurupo","description":"Lists dependencies of a PE (exe/dll) file","archived":false,"fork":false,"pushed_at":"2024-04-07T03:40:23.000Z","size":52,"stargazers_count":23,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-09-15T04:42:05.084Z","etag":null,"topics":["ldd","mingw","mingw-w64","pe-analyzer"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/mingw-ldd/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nurupo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"nurupo","custom":["https://github.com/nurupo/donate","https://paypal.com/donate?hosted_button_id=9HJHAH5UDL3GL","https://blockstream.info/address/34qxFsZjs1ZWVBwer11gXiycpv7QHTA8q3"]}},"created_at":"2020-05-31T03:13:57.000Z","updated_at":"2025-06-13T09:26:26.000Z","dependencies_parsed_at":"2024-11-13T20:40:17.477Z","dependency_job_id":null,"html_url":"https://github.com/nurupo/mingw-ldd","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/nurupo/mingw-ldd","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nurupo%2Fmingw-ldd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nurupo%2Fmingw-ldd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nurupo%2Fmingw-ldd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nurupo%2Fmingw-ldd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nurupo","download_url":"https://codeload.github.com/nurupo/mingw-ldd/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nurupo%2Fmingw-ldd/sbom","scorecard":{"id":698881,"data":{"date":"2025-08-11","repo":{"name":"github.com/nurupo/mingw-ldd","commit":"65d4a1dd889e66e9751e108257fe8cae80789bb8"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.2,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":5,"reason":"dependency not pinned by hash detected -- score normalized to 5","details":["Warn: pipCommand not pinned by hash: release.sh:8","Info:   1 out of   2 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-22T04:36:40.169Z","repository_id":57441727,"created_at":"2025-08-22T04:36:40.169Z","updated_at":"2025-08-22T04:36:40.169Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30476420,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T20:45:58.186Z","status":"ssl_error","status_checked_at":"2026-03-13T20:45:20.133Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ldd","mingw","mingw-w64","pe-analyzer"],"created_at":"2024-11-13T20:26:30.823Z","updated_at":"2026-03-13T21:36:13.350Z","avatar_url":"https://github.com/nurupo.png","language":"Python","funding_links":["https://github.com/sponsors/nurupo","https://github.com/nurupo/donate","https://paypal.com/donate?hosted_button_id=9HJHAH5UDL3GL","https://blockstream.info/address/34qxFsZjs1ZWVBwer11gXiycpv7QHTA8q3"],"categories":[],"sub_categories":[],"readme":"# mingw-ldd\n\nLists dependencies of a PE (exe/dll) file.\n\n\n## Features\n\n- Mimics ldd output\n- Allows to specify dll lookup paths\n- Has no hardcoded dll lookup paths\n- Makes sure the dependencies are of the same CPU architecture\n- Sorts the output by dll name\n- Can also print in per-dep or tree output formats\n- Uses multiprocessing to speed up the dll lookup\n\nNote that the arguments do not mimic ldd arguments.\n\n\n## Usage\n\nThe script can be installed from PyPi:\n\n```sh\npip install mingw_ldd\nmingw-ldd --help\n```\n\nThe script can be used stanalone, given you have `pefile` installed:\n\n```sh\nsudo apt-get install python3-pefile\n./mingw_ldd/mingw_ldd.py --help\n```\n\nor:\n\n```sh\nsudo apt-get install virtualenv\nvirtualenv -p /usr/bin/python3 env\n./env/bin/pip install -r requirements.txt\n./env/bin/python3 ./mingw_ldd/mingw_ldd.py --help\n```\n\nThe `mingw_ldd.py` script file is self-contained and can be easily copied into other project's codebase.\n\n\n## Example\n\n```sh\n$ mingw-ldd.py -h\nusage: 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\n```\n\nLdd-like output:\n\n```sh\n$ ./mingw-ldd.py /home/nurupo/qtox/workspace/i686/qtox/release/libtoxcore.dll \\\n                 --dll-lookup-dirs /usr/lib/gcc/i686-w64-mingw32/*-posix \\\n                                   /usr/i686-w64-mingw32/lib \\\n                                   /home/nurupo/qtox/workspace/i686/qtox/release\n        advapi32.dll =\u003e not found\n        iphlpapi.dll =\u003e not found\n        kernel32.dll =\u003e not found\n        libgcc_s_sjlj-1.dll =\u003e /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll\n        libopus-0.dll =\u003e /home/nurupo/qtox/workspace/i686/qtox/release/libopus-0.dll\n        libsodium-23.dll =\u003e /home/nurupo/qtox/workspace/i686/qtox/release/libsodium-23.dll\n        libvpx.dll =\u003e /home/nurupo/qtox/workspace/i686/qtox/release/libvpx.dll\n        libwinpthread-1.dll =\u003e /usr/i686-w64-mingw32/lib/libwinpthread-1.dll\n        msvcrt.dll =\u003e not found\n        user32.dll =\u003e not found\n        ws2_32.dll =\u003e not found\n```\n\nPer-dep-list output:\n\n```sh\n$ ./mingw-ldd.py /home/nurupo/qtox/workspace/i686/qtox/release/libtoxcore.dll \\\n                 --output-format per-dep-list \\\n                 --dll-lookup-dirs /usr/lib/gcc/i686-w64-mingw32/*-posix \\\n                                   /usr/i686-w64-mingw32/lib \\\n                                   /home/nurupo/qtox/workspace/i686/qtox/release\n/home/nurupo/qtox/workspace/i686/qtox/release/libopus-0.dll\n        KERNEL32.dll =\u003e not found\n        libgcc_s_sjlj-1.dll =\u003e /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll\n        msvcrt.dll =\u003e not found\n/home/nurupo/qtox/workspace/i686/qtox/release/libsodium-23.dll\n        ADVAPI32.dll =\u003e not found\n        KERNEL32.dll =\u003e not found\n        libgcc_s_sjlj-1.dll =\u003e /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll\n        msvcrt.dll =\u003e not found\n        USER32.dll =\u003e not found\n/home/nurupo/qtox/workspace/i686/qtox/release/libtoxcore.dll\n        IPHLPAPI.DLL =\u003e not found\n        KERNEL32.dll =\u003e not found\n        libgcc_s_sjlj-1.dll =\u003e /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll\n        libopus-0.dll =\u003e /home/nurupo/qtox/workspace/i686/qtox/release/libopus-0.dll\n        libsodium-23.dll =\u003e /home/nurupo/qtox/workspace/i686/qtox/release/libsodium-23.dll\n        libvpx.dll =\u003e /home/nurupo/qtox/workspace/i686/qtox/release/libvpx.dll\n        libwinpthread-1.dll =\u003e /usr/i686-w64-mingw32/lib/libwinpthread-1.dll\n        msvcrt.dll =\u003e not found\n        WS2_32.dll =\u003e not found\n/home/nurupo/qtox/workspace/i686/qtox/release/libvpx.dll\n        KERNEL32.dll =\u003e not found\n        libgcc_s_sjlj-1.dll =\u003e /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll\n        libwinpthread-1.dll =\u003e /usr/i686-w64-mingw32/lib/libwinpthread-1.dll\n        msvcrt.dll =\u003e not found\n/usr/i686-w64-mingw32/lib/libwinpthread-1.dll\n        KERNEL32.dll =\u003e not found\n        msvcrt.dll =\u003e not found\n/usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll\n        KERNEL32.dll =\u003e not found\n        libwinpthread-1.dll =\u003e /usr/i686-w64-mingw32/lib/libwinpthread-1.dll\n        msvcrt.dll =\u003e not found\n```\n\n\nTree output:\n\n```sh\n$ ./mingw-ldd.py /home/nurupo/qtox/workspace/i686/qtox/release/libtoxcore.dll \\\n                 --output-format tree \\\n                 --dll-lookup-dirs /usr/lib/gcc/i686-w64-mingw32/*-posix \\\n                                   /usr/i686-w64-mingw32/lib \\\n                                   /home/nurupo/qtox/workspace/i686/qtox/release\n/home/nurupo/qtox/workspace/i686/qtox/release/libtoxcore.dll\n├── IPHLPAPI.DLL =\u003e not found\n├── KERNEL32.dll =\u003e not found\n├── libgcc_s_sjlj-1.dll =\u003e /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll\n│   ├── KERNEL32.dll =\u003e not found\n│   ├── libwinpthread-1.dll =\u003e /usr/i686-w64-mingw32/lib/libwinpthread-1.dll\n│   │   ├── KERNEL32.dll =\u003e not found\n│   │   └── msvcrt.dll =\u003e not found\n│   └── msvcrt.dll =\u003e not found\n├── libopus-0.dll =\u003e /home/nurupo/qtox/workspace/i686/qtox/release/libopus-0.dll\n│   ├── KERNEL32.dll =\u003e not found\n│   ├── libgcc_s_sjlj-1.dll =\u003e /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll\n│   │   ├── KERNEL32.dll =\u003e not found\n│   │   ├── libwinpthread-1.dll =\u003e /usr/i686-w64-mingw32/lib/libwinpthread-1.dll\n│   │   │   ├── KERNEL32.dll =\u003e not found\n│   │   │   └── msvcrt.dll =\u003e not found\n│   │   └── msvcrt.dll =\u003e not found\n│   └── msvcrt.dll =\u003e not found\n├── libsodium-23.dll =\u003e /home/nurupo/qtox/workspace/i686/qtox/release/libsodium-23.dll\n│   ├── ADVAPI32.dll =\u003e not found\n│   ├── KERNEL32.dll =\u003e not found\n│   ├── libgcc_s_sjlj-1.dll =\u003e /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll\n│   │   ├── KERNEL32.dll =\u003e not found\n│   │   ├── libwinpthread-1.dll =\u003e /usr/i686-w64-mingw32/lib/libwinpthread-1.dll\n│   │   │   ├── KERNEL32.dll =\u003e not found\n│   │   │   └── msvcrt.dll =\u003e not found\n│   │   └── msvcrt.dll =\u003e not found\n│   ├── msvcrt.dll =\u003e not found\n│   └── USER32.dll =\u003e not found\n├── libvpx.dll =\u003e /home/nurupo/qtox/workspace/i686/qtox/release/libvpx.dll\n│   ├── KERNEL32.dll =\u003e not found\n│   ├── libgcc_s_sjlj-1.dll =\u003e /usr/lib/gcc/i686-w64-mingw32/9.3-posix/libgcc_s_sjlj-1.dll\n│   │   ├── KERNEL32.dll =\u003e not found\n│   │   ├── libwinpthread-1.dll =\u003e /usr/i686-w64-mingw32/lib/libwinpthread-1.dll\n│   │   │   ├── KERNEL32.dll =\u003e not found\n│   │   │   └── msvcrt.dll =\u003e not found\n│   │   └── msvcrt.dll =\u003e not found\n│   ├── libwinpthread-1.dll =\u003e /usr/i686-w64-mingw32/lib/libwinpthread-1.dll\n│   │   ├── KERNEL32.dll =\u003e not found\n│   │   └── msvcrt.dll =\u003e not found\n│   └── msvcrt.dll =\u003e not found\n├── libwinpthread-1.dll =\u003e /usr/i686-w64-mingw32/lib/libwinpthread-1.dll\n│   ├── KERNEL32.dll =\u003e not found\n│   └── msvcrt.dll =\u003e not found\n├── msvcrt.dll =\u003e not found\n└── WS2_32.dll =\u003e not found\n```\n\n\n## Performance\n\nThe performance might be a bit slower than expected due to `pefile` sometimes taking up to few seconds to parse a dll.\nWe try to mitigate this by multiprocessing pefile's parsing.\nUsing the most up to date `pefile` should help too.\nSpecifically, the current version of `pefile` on PyPi -- version 2019.4.18, is noticeably faster than the version 2018.8.8 packaged in Debian Buster.\n\nIf the performance is an issue, you could give these projects a try:\n\n- [ntldd](https://github.com/LRN/ntldd) - a cross-platform ldd-like program written in C\n- [Dependency Walker](https://www.dependencywalker.com/) - a freeware Windows GUI application that displays PE dependencies\n\n\n## Known issues\n\n### API Set dlls\n\nDlls that start with `api-` and `ext-`, e.g. `api-ms-win-core-heap-l2-1-0.dll` or `ext-ms-win-ntuser-window-l1-1-1.dll`, might get incorrectly marked as \"not found\".\n\nSuch dlls are part of Windows's [API Set](https://docs.microsoft.com/en-us/windows/win32/apiindex/windows-apisets) feature.\nThe way the API Set works, is that often times the requested dlls don't even exist on the system, instead the library loader notices `api-*.dll` and `ext-*.dll` patterns and queries a mapping data-structure found in `ApiSetSchema.dll` to see which actual dlls those names map to and links those instead.\nFor example, linking to [`api-ms-win-core-heap-l2-1-0.dll`, in which one would expect to find the `LocalAlloc` function](https://docs.microsoft.com/en-us/uwp/win32-and-com/win32-apis#apis-from-api-ms-win-core-heap-l2-1-0dll), would [instead result in linking to `kernel32.dll`](https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-localalloc), and [`ext-ms-win-ntuser-window-l1-1-1.dll`, in which one would expect to find the `FindWindowEx` function, would instead link to `user32.dll`](https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findnextfilea).\n\nmingw-ldd scans directories for actual dll files, so since `api-` and `ext-` dlls might not exist, they could be just some table mappings to other dlls instead, mingw-ldd is unable to find them and thus reports \"not found\".\nThere is no public interface for applications to access this API Set dll mapping, the format of the mapping is not documented, and there are several reverse engineering articles attempting to document it, noting that `ApiSetSchema.dll` offsets change from architecture to architecture.\n\nBecause it's rather non-trivial and non-portable to access this mapping, mingw-ldd doesn't implement any API Set dll resolution.\nIt also doesn't affect my use-case of mingw-ldd, which is to see if a Windows binary I have built is missing any dll dependency before I zip it and package for users to download.\nBecause these API Set dlls are system libraries, you might just assume that they all are present.\nIt's non-system dlls missing that I'm more concerned about.\n\nThis doesn't mean that I don't want to see API Set dll resolution implemented.\nFeel free to make a Python module parsing `ApiSetSchema.dll` that hides the portability details and I will make mingw-ldd use it.\n\n\n## Disclaimer\n\nThis project is not affiliated with MinGW, the name \"mingw-ldd\" is used primarely to facilitate online search discoverability as MinGW suit is missing ldd.\n\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnurupo%2Fmingw-ldd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnurupo%2Fmingw-ldd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnurupo%2Fmingw-ldd/lists"}