Поиск внешних звонков в C ++ DLL - PullRequest
3 голосов
/ 23 июля 2010

В настоящее время мы используем DLL драйвера оборудования для определенного компонента оборудования, с которым мы взаимодействуем.Тем не менее, у нас также есть старая внутренне разработанная DLL, написанная на VC ++ в 2002 году, которая оборачивает эту DLL для нескольких основных функций.Этот код давно утерян и был разработан задолго до того, как я появился на сцене.Таким образом, он не может быть поддержан или даже просмотрен в случае сбоя.Мы пытаемся отключить посредника, обращаясь к драйверу напрямую из нашего приложения на C # .NET.

Я знаю, что эта DLL просто оборачивает DLL поставщика оборудования, но сигнатуры методов не равны.Похоже, что он вызывает несколько функций драйвера в одном методе.Мой вопрос заключается в следующем: как бы я мог просмотреть все внешние вызовы, которые эта DLL-оболочка выполняет к DLL драйвера для этой конкретной функции?Я не беспокоюсь ни о каком другом коде;Я вполне уверен, что смогу сделать вывод, что если я смогу просто выяснить, какие звонки он делает драйверу.

Редактировать: Более краткое объяснение (составлено) ...

Driver.dll имеет функцию с именем StartAcquisition(int, string).Он также имеет множество функций настройки.

Wrapper.dll имеет функцию с именем StartAcquisition(int, string, double, int).

Я подозреваю, что Wrapper.dll являетсявызов Driver.dll StartAcquisition(int, string) в дополнение к нескольким другим вызовам (вероятно, эти функции настройки).Я хочу знать, какими могут быть эти другие звонки.

Ответы [ 4 ]

2 голосов
/ 23 июля 2010

Я думаю, что PE.Explorer может помочь вам .

Даже если он не перечисляет его напрямую, вы все равно можете получить разборку и проверить отображение таблиц импорта.Возможно, связав этот инструмент с другим, например Windbg или OllyDbg , вы можете получить интересные результаты.

Любой инструмент, который может вам помочь, БУДЕТ иметь дело с разборкой.В текущем формате Portable Executable (PE) существуют явные разделы для импорта / экспорта.Чтобы отобразить эти таблицы с помощью кода, нужна какая-то интерпретация, поэтому я не думаю, что инструмент, который делает это сразу, существует.

1 голос
/ 23 июля 2010

Вы можете попробовать дизассемблер, например IDA Pro (http://www.hex -rays.com / idapro / ).

0 голосов
/ 24 июля 2010

Если у вас есть доступ к интерфейсу DLL поставщика, вы можете создать свою собственную библиотеку фиктивных замен и поместить ее в путь, чтобы устаревшая DLL могла его использовать. Макетная библиотека ничего не будет делать и просто сообщит, когда и когда был вызван какой-либо экспорт.

0 голосов
/ 24 июля 2010

Похоже, вам придется создать собственную маленькую утилиту для поиска и дизассемблирования существующих программ, а затем использовать вашу любимую утилиту для сканирования выходного текста и поиска вашего звонка.Я надеюсь, что вам не нужно, но это может быть быстрее, чем найти утилиту, которая уже делает это.

...