Поиск Параметров Функции Dll

Как я могу найти параметры без документов функция Dll?

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

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

7 ответов


вам нужно разобрать приложение, используя, как отметил Павел, что-то вроде IDA Pro (или бесплатную версию того же самого).

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

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


Я сделал в ответ!--1-->здесь, ReactOS - ваш лучший выбор, как кажется снова,все вот немного не так.

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

A много более авантюрный (и я не считаю, что обсуждается так далеко от внешнего вида вещей), техника заключается в перечислении содержимого PDB.

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

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

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

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


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


Это com Dll? Если это com Dll, то зарегистрируйте его, используйте OLE view, чтобы узнать интерфейсы и параметры.


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

Если это больше похоже ?_MyFunction@LoNgSetOfSome@_StrangeChAracTers это c++ - украшенный, и вы можете попытаться "undecorate" его, используя {неофициальную} информацию из здесь


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

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


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

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