2016-08-10 5 views
1

У меня есть небольшая программа java. Он загружает jni-dll и что dll загружает нормальную dll win32. Я хотел бы отлаживать, какие аргументы Java-приложение в конечном итоге обеспечивает один конкретный вызов win32 dll. Мой план состоял в том, чтобы поставить точку останова на этот вызов DLL в ollydbg, а затем проверить стек. Но я должен предоставить исполняемый файл, когда я запускаю режим отладки в ollydbg, поэтому единственный вариант, который у меня есть, - это предоставить java.exe параметры для запуска моей java-программы. Но я могу установить точку останова в DLL, когда DLL в конечном итоге загрузится, что требует от меня в основном запускать программу. Я не вижу, как я не могу «остановить» выполнение, чтобы установить точку останова, и если бы я мог остановиться, мне не понадобилась бы точка останова. Может ли кто-нибудь сказать мне, что мне нужно сделать?как отлаживать jni dll

+0

Какая IDE вы используете и какую версию IDE? – JJF

+0

«Но я могу установить точку останова в DLL, когда DLL загружается». Не правда. Не знаю о других IDE, но Visual Studio также разбивается на ранее установленные контрольные точки. – user2543253

+0

@JFF: Я пытался использовать ollydbg, но я не могу загрузить DLL. Я должен начать с исполняемого файла. В противном случае я попробую Visual Studio Express Edition – kaidentity

ответ

2

Вы можете дать команду отладчику сломаться при загрузке конкретной DLL.

  • нагрузка "java.exe" в OllyDbg
  • к "> Параметры опции" меню Go (ALT + O).
  • В окне настроек, в левом меню, перейдите в раздел «Отладка> События»
  • Check «Pause на новый модуль (DLL)»
  • (Необязательно) Установите флажок «Только на следующих модулях» (в противном случае отладчик будет разбит на все загруженные модули, включая системные).
  • Нажмите кнопку «Добавить» и заполните поле с именем вашей DLL.
  • Нажмите кнопку «OK» в нижней части «Отладка событий» окна

enter image description here

  • Перейти к «Файл> Установить новые аргументы» меню, если вы хотите передать некоторые аргументы в Java. Exe.
  • Перезапустите программу (CTRL + F2), это необходимо для внесения изменений.
  • Запустите программу, она должна сломаться при загрузке jni dll (на основной DLL).
  • Нажмите «CTRL + N», чтобы увидеть имена, экспортируемые вашей DLL
    • Примечание: вы можете ввести имя, которое вы ищете в этом окне
    • это выглядит следующим образом (пример с kernel32.dll система DLL, я напечатал "CreateFileW" в окне):

enter image description here

  • Нажмите F2 на имя функции, которое вы хотите разбить (это положило точку останова на функцию)
  • Запустить программу с F9: если функция вызывается, это должно сломаться.
+0

Изумительный. Большое спасибо. – kaidentity

+0

@kaidentity Рад, что я мог помочь!Также добавлена ​​точность «Проверить» только в следующих модулях «' в окне событий. Если у вас есть время, сообщите мне, если все работает по назначению. – Neitsa

+0

@Neista: какую версию ollydbg вы используете? Я пробовал 10 и 20, и ни один из них не могу указать, на каком модуле я хочу приостановить. – kaidentity