Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

НАМНОГО более изобретательный (и я не верю, что обсуждаемый так далеко от внешнего вида вещей) метод состоит в том, чтобы перечислять содержимое PDB.

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top