Як пов’язати .dll з належною версією Dependency Walker?


1

Про класний лайфхак, про який я дізнався від свого колеги: ви пов'язуєте .dll файли із Denderpend Walker, і тепер, коли ви намагаєтесь "запустити" .dll файл, він відкриває Dependency Walker для його аналізу.

Проблема полягає в тому, що існує дві версії Dependency Walker: одна 32-розрядна та інша 64-розрядна. І рекомендується використовувати версію того ж біту для .dll:

Так. Залежність Walker буде працювати з будь-яким 32-бітним або 64-бітним модулем Windows. Існують 32-розрядні та 64-бітні версії Dependency Walker. Усі версії можуть працювати або відкривати 32-бітні та 64-бітні модулі. Однак існують основні переваги використання 32-розрядного ходунка залежностей для обробки 32-бітних модулів, а 64-розрядного ходунка залежності - для оброблення 64-бітних модулів. Особливо це стосується роботи на 64-бітній версії Windows, яка дозволяє виконувати як 32-розрядні, так і 64-бітні програми. 32-розрядна підсистема в 64-розрядної Windows (відома як "WOW64") має власний приватний реєстр, "AppPaths", "K knownDlls", системні папки та обробку маніфестів. Тільки 32-розрядна версія Dependency Walker може отримати доступ до цього 32-бітного середовища, яке потрібно для точної обробки 32-бітного модуля. Так само лише 64-розрядна версія Dependency Walker може повністю отримати доступ до 64-бітного середовища, тому її завжди слід використовувати для обробки 64-бітних модулів.

Чи є спосіб пов’язати 32-бітні dll з 32-розрядною версією Dependency Walker, а 64-розрядні dll з 64-розрядною версією Dependency Walker? Мене особливо цікавить відповідь на Windows 7 або 10.


Найпростішим способом було б, щоб хтось написав програму "Між ними", яку ви призначили для відкриття файлів DLL. Тоді ця програма повинна вирішити, яку ходунку залежностей запустити.
AEonAX

"Чи є спосіб пов'язати 32-розрядні dll з 32-розрядною версією Dependency Walker, а 64-розрядні dll з 64-розрядною версією Dependency Walker?" - 64-бітний процес може посилатися лише на 64-бітні залежності.
Рамхаунд

Відповіді:


0

Для цього створили інструмент на основі пітона: https://github.com/mmatrosov/DllDispatcher

Інструмент досить простий. Як зазначено у відповідному readme, ви пов'язуєте .dll з DllDispatcher.batфайлом, який викликає DllDispatcher.pyфайл, який аналізує вміст .dll та визначає, чи наданий dll є 32-бітним або 64-бітним. Виходячи з цього, він викликає одну з двох наданих програм. Шляхи до додатків просто кодуються на початку DllDispatcher.pyфайлу.

Я не знайшов простого способу визначити, чи є DLL 32-бітним або 64-бітним. GetBinaryTypeпрацює лише для файлів .exe. Для dll слід або фактично завантажити бібліотеку, а потім передати ручку IsWow64Process(), або вручну проаналізувати заголовок DLL (він має формат файлу PE). Я вибрав останнє. Він менш надійний, але більш швидкий. Я вважаю, що надійність не є великою проблемою, оскільки навряд чи формат ПЕ зміниться найближчим часом, і це рішення не повинно бути повністю бездоганним.


Величезне ура! :)
bertieb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.