Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

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