Нахождение параметров функции Dll

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

18
задан Jean 31 March 2013 в 15:43
поделиться

7 ответов

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

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

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

8
ответ дан 30 November 2019 в 08:10
поделиться

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

5
ответ дан 30 November 2019 в 08:10
поделиться

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

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

2
ответ дан 30 November 2019 в 08:10
поделиться

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

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

1
ответ дан 30 November 2019 в 08:10
поделиться

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

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

1
ответ дан 30 November 2019 в 08:10
поделиться

Это - COM Dll? Если это - COM Dll, то зарегистрируйте его, используйте представление OLE для знания Interaface и параметров.

4
ответ дан 30 November 2019 в 08:10
поделиться

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

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

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

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

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

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

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

8
ответ дан 30 November 2019 в 08:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: