簡體   English   中英

如何調試jni dll

[英]how to debug a jni dll

我有一個小的java程序。 它加載一個jni dll並且該DLL加載一個正常的win32 dll。 我想調試最終Java應用程序為win32 dll的一個特定調用提供哪些參數。 我的計划是在ollydbg中對此DLL調用設置斷點,然后檢查堆棧。 但是當我在ollydbg中啟動調試模式時,我必須提供可執行文件,所以我唯一的選擇是為java.exe提供啟動我的java程序的參數。 但是我最終只能在DLL加載時設置斷點,這需要我基本上運行程序。 我無法看到我如何不能“停止”執行設置斷點,如果我可以停止以某種方式我不需要斷點。 誰能告訴我我需要做什么?

您可以指示調試器在加載特定dll時中斷。

  • 在Ollydbg中加載“java.exe”
  • 轉到“選項>選項”菜單(ALT + O)。
  • 在選項窗口的左側菜單中,轉到“調試>事件”
  • 選中“暫停新模塊(DLL)”
  • (可選)選中“僅在以下模塊上”(否則調試器將中斷所有已加載的模塊,包括系統模塊)。
  • 單擊“添加”按鈕,並在框中填入您的dll名稱。
  • 單擊“調試事件”窗口底部的“確定”

在此輸入圖像描述

  • 如果要將一些args傳遞給java.exe,請轉到“文件>設置新參數”菜單。
  • 重新啟動程序(CTRL + F2),這需要考慮更改。
  • 運行程序,它應該在你加載jni dll時中斷(在DLL main上)。
  • 按“CTRL + N”查看DLL導出的名稱
    • 注意:您實際上可以在此窗口中鍵入要搜索的名稱
    • 它看起來像那樣(使用kernel32.dll系統DLL的例子,我在窗口上鍵入“CreatefileW”):

在此輸入圖像描述

  • 在要打破的功能名稱上按F2(這會在功能上設置斷點)
  • 使用F9運行程序:如果調用該函數,則應該中斷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM