Преобразование смещения DLL в имя метода

Задний план

В моей программе Java произошел сбой, и я получил отчет о сбое Java. Однако сбой произошел в нативном коде JNI, поэтому журнал сбоев не очень полезен, лучше иметь дамп сбоя. Единственная полезная информация — это смещение в моей родной DLL.

Выдержка из отчета о сбое Java:

C  [test.dll+0x1032]

Поскольку сбой воспроизвести нелегко, я не могу создать файл .dmp, но все же хочу выяснить, какой метод был вызван.

Запрос инструмента

Я ищу инструмент, который загрузит произвольный файл PDB, я ввожу смещение, и инструмент преобразует его в имя метода + смещение внутри метода.

Input:  test.dll+0x1032
Output: test.dll!mymethod+0x2A

Требования

  • Работает на Windows 7 x64
  • Работает с PDB версии 2.0 и 7.0
  • предпочтительно бесплатно

Ответы (1)

Я узнал, что это можно сделать с помощью WinDbg (часть инструментов отладки для Windows ) следующим образом:

  1. Откройте исполняемый файл или DLL как файл дампа ( Ctrl+ D), а не как исполняемый файл
  2. .symfix;.reloadдля загрузки PDB, .sympath+ <path>если вам нужны собственные символы
  3. ln <address>для разрешения имени метода (например ln test.dll+0x1032)

Это ответ, потому что:

  • WinDbg работает в Windows 7 x64/x86 (например, версии 6.2.9200/6.3.9600)
  • WinDbg загружает произвольные PDB
  • доступен бесплатно