Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
Необходимо демонтировать использование приложения, как Paul отметил, что-то как IDA Pro (или бесплатная версия того же).
А хорошим вводным ресурсом является Wikibook, x86 Дизассемблирование . А именно, смотрите на раздел по функции и стековые фреймы . Выведение параметров функции может быть простым для простых функций, берущих несколько параметров стандартного типа.
, Вероятно, лучший способ начать с этим видом вещи состоит в том, чтобы создать маленький тест DLL, создать несколько функций с известными параметрами и затем демонтировать Ваш DLL для наблюдения шаблонов. Узнайте о дизассемблировании из своих собственных функций (для которого Вы имеете исходный код и знаете полную подпись) вместо того, чтобы погрузиться в разборку стороннего материала.
Единственный способ сделать это путем разборки функции и наблюдения, как это использует регистры и стек. IDA Pro является лучшим инструментом, чтобы сделать это, но это не что-то, что тривиально.
В первую очередь, загрузите зависимость Walker и откройте свой DLL в нем. Вы будете видеть символы, экспортируемые и импортированные. Если Ваше имя функции похоже на _MyFunction - это - стиль "C" (не украшенный), и Вы слишком много не имеете отношение к нему (может быть, демонтируют, как сказано прежде)
, Если это похоже на больше? _MyFunction@LoNgSetOfSome _ StrangeChAracTers, это - C++ - украшенный и можно попытаться "не украсить" его с помощью {неофициальной} информации от здесь
Если единственная информация, которую Вы имеете, является неукрашенным именем функции, то, к сожалению, не возможно вывести параметры функции из этого одного.
, Если Вы хороши с блоком, могло бы быть возможно демонтировать машинный код для функции и перепроектировать его. Но это довольно трудно сделать для всех кроме самых простых функций.
Я не действительно знаком с форматом PE, который использует Windows, но я вполне уверен нет никакого очень легкого способа сделать это. Если таблица символов не была разделена, Вы можете находить некоторую информацию (не уверенный, как Windows хранит отладочную информацию в PE), но это почти наверняка не помогло бы Вам с типами параметра. Лучшая вещь сделать загрузить DLL в отладчик, и эксперимент с ним... контролируют необработанную память на стековых фреймах, отправляют различные типы переменных, и т.д.
, Даже если Вы найдете хороший ресурс на отладочной информации в файле PE, то почти наверняка не будет никакой информации для закрытой функции.
Это - COM Dll? Если это - COM Dll, то зарегистрируйте его, используйте представление OLE для знания Interaface и параметров.
Я дал довольно подробный ответ здесь , ReactOS - ваш лучший выбор, как кажется снова, все здесь немного не в порядке.
Я бы категорически не одобрял попыток дизассемблировать системные DLL.
A НАМНОГО более рискованный (и я действительно не думаю, что обсуждалось так далеко от внешнего вида), метод заключается в перечислении содержимого PDB.
Файлы PDB являются отладочными символами, как вы, возможно, знаете, однако, требуется Microsoft, из-за действий по делам антимонопольного суда , чтобы публиковать большие объемы недокументированной информации.
Полностью точная, полезная и обновленная информация для огромного количества API Windows документируется только через файлы PDB. Соглашение о вызовах, количество аргументов и даже типы и имена аргументов задокументированы (но, конечно же, без подробностей использования :).
Просмотрите DIA SDK, dia2dump - хороший пример, распространяемый с Visual Studio, для дальнейшего исследования он также предоставляет решение недекорировать функции, чтобы поговорить конкретно о вашем вопросе.
Кроме того, kernel32 предоставляет UnDecorateSymbolName, поэтому вы можете использовать его также, если не хотите связываться с библиотеками debug sdk.