繁体   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