2008-11-15 9 views
16

Как найти параметры Недокументированные функции Dll?Поиск функциональных параметров Dll

Я искал по всему Интернету и в итоге нашел один способ: он включает в себя декорированные функции. Однако я не могу найти способ получить их.

Любая помощь будет оценена по достоинству.

ответ

6

Вам необходимо разобрать приложение, как отметил Павел, что-то вроде IDA Pro (или бесплатной версии).

Хороший вводный ресурс - это Wikibook, x86 Disassembly. В частности, посмотрите раздел на functions and stack frames. Параметры дедуцирующей функции могут быть простыми для простых функций с несколькими параметрами стандартного типа.

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

+1

Hrm .... В соответствии с моим ответом: P (joking ok;), в любом случае вам не нужно разбирать вообще, вы можете получить гораздо более точную информацию намного быстрее, прежде чем прибегать к этому , на самом деле это последний возможный вариант после шагов, которые я предложил. – RandomNickName42 2009-07-02 09:40:14

5

Единственный способ сделать это - разобрать эту функцию и посмотреть, как она использует регистры и стек. IDA Pro - лучший инструмент для этого, но это не то, что тривиально.

+0

Хороший ответ, вероятно, я должен удалить мою. Мне нужно работать на моей краткости :) – 2008-11-15 05:35:38

1

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

Если вы хорошо разбираетесь в сборке, возможно, удастся разобрать код машины для этой функции и обработать ее обратно. Но это достаточно сложно сделать для всех, кроме самых простых функций.

1

Я не очень хорошо знаком с форматом PE, который использует Windows, но я уверен, что нет реального способа сделать это. Если таблица символов не была удалена, вы можете найти некоторую информацию (не знаете, как Windows хранит отладочную информацию в PE), но она почти наверняка не поможет вам с типами параметров. Лучше всего загрузить DLL в отладчик и поэкспериментировать с ним ... контролировать необработанную память на фреймах стека, отправлять различные типы переменных и т. Д.

Даже если вы найдете хороший ресурс для информации отладки в PE-файле почти наверняка не будет никакой информации для частной функции.

4

Это COM Dll? Если это COM Dll, затем зарегистрируйте его, используйте представление OLE, чтобы узнать Interafaces и параметры.

2

Прежде всего, скачайте Dependency Walker и откройте свою DLL. Вы увидите экспортированные и импортированные символы. Если ваше имя функции выглядит как _MyFunction - это стиль «C» (не оформлен), и вы не слишком много делаете с ним (может быть разобрано, как было сказано ранее)

Если это больше похоже? _MyFunction @ LoNgSetOfSome @ _StrangeChAracTers это C++ - оформлены и вы можете попробовать «undecorate» его с помощью {неофициальной} информации от here

+0

PE Explorer может самостоятельно выводить экспортированные символы из библиотек, скомпилированных как с компиляторами Microsoft, так и с Borland C++: http://www.heaventools.com/unmangle.htm – Wylder 2010-07-16 17:15:44

7

Я сделал довольно углубленные ответ here, ReactOS является лучшим выбором, как это кажется снова, все здесь немного от основания.

Я бы сильно обескураживал пытаясь разобрать систему DLL.

Файлы PDB являются отладочными символами, как вы, возможно, знаете, однако Microsoft обязана из-за действия из дел антитрестовского суда выпускать большие объемы другой не документированной информации.

Полностью точная, полезная и обновленная информация для огромного количества Windows API: только, зарегистрированный через файлы PDB. Вызывающая конвенция, количество аргументов и даже типы аргументов и имена документируются их (но не специфические особенности использования курса :).

Обзор DIA SDK, dia2dump - хороший пример, распространяемый с Visual Studio, для дальнейшего изучения, он также предлагает решение для undecorate функции, чтобы говорить конкретно по вашему вопросу.

Кроме того, kernel32 предоставляет UnDecorateSymbolName, поэтому вы можете использовать это также, если вы не хотите ссылаться на библиотеки debug sdk.

 Смежные вопросы

  • Нет связанных вопросов^_^