Как использовать dll, не зная параметров? - PullRequest
1 голос
/ 15 февраля 2010

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

Ответы [ 3 ]

4 голосов
/ 15 февраля 2010

Вы не можете, в общем. Это из Dependency Walker FAQ:

В: Как мне просмотреть параметр и типы возвращаемых функций?

A: Для большинства функций это информация просто отсутствует в модуль. Файл модуля Windows формат обеспечивает только один текст строка для идентификации каждой функции. Там нет структурированного способа перечислить количество параметров, параметр типы или тип возвращаемого значения. Тем не мение, некоторые языки делают то, что называется функция «украшение» или «калечить», который является процессом кодирования информация в текстовую строку. За Например, такая функция, как int Foo (int, int) закодировано простым украшением может быть экспортировано как _Foo @ 8. 8 относится к количеству байтов, используемых параметры. Если C ++ оформление используется, функция будет экспортирована как? Foo @@ YGHHH @ Z, который может быть непосредственно декодируется обратно в оригинальный прототип функции: int Foo (int, int). Зависимость Уокер поддерживает декорирование C ++ с помощью Команда декодерации функций C ++.

Редактировать: Одна вещь, которую вы могли бы сделать, я думаю, это получить дизассемблер и дизассемблирование DLL и / или вызывающего кода, и определить из этого количество и типы аргументов, и типы возврата. Вы не сможете узнать названия аргументов.

1 голос
/ 16 февраля 2010

Вы можете использовать dumpbin (который является частью Visual Studio Professional или VC ++ Express, или загрузить пакет платформы, или даже использовать OpenWatcom C ++) в DLL для поиска «экспорта» раздел, как пример:

dumpbin /all SimpleLib.dll | more

Output would be:
  Section contains the following exports for SimpleLib.dll

    00000000 characteristics
    4A15B11F time date stamp Thu May 21 20:53:03 2009
        0.00 version
           1 ordinal base
           2 number of functions
           2 number of names

    ordinal hint RVA      name

          1    0 00001010 fnSimpleLib
          2    1 00001030 fnSimpleLib2

Посмотрите на порядковые номера, две экспортированные функции ... единственное, что нужно выяснить, какие параметры используются ...

Вы также можете использовать PE Explorer , чтобы выяснить это для вас. Работать с параметрами немного сложно, вам нужно разобрать двоичный файл и найти вызов функции по смещению в файле, а затем обработать параметры, посмотрев регистры 'SP', 'BP'.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0 голосов
/ 16 февраля 2010

Вы можете перехватить функций в DLL, которую вы хотите отслеживать (если вы знаете, сколько аргументов они принимают)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...