我有一个使用共享库的android应用程序,我想通过调试器进行逐步调试。我已经成功地使用IDA 6.3通过IDA附带的android_server调试服务器调试可执行文件,但是还没有将其与共享库一起使用。

对于一个特定的示例,假设我有以下Java代码(来自Android NDK中的hellojni示例):

System.loadLibrary("hello-jni");
tv.setText( stringFromJNI() );


使用JNI C代码为:

jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz )
{
        return (*env)->NewStringUTF(env, "Hello from JNI !");
}


如果仅在应用程序启动时运行Java代码,我该如何中断函数Java_com_example_hellojni_HelloJni_stringFromJNI

评论

您不能附加正在运行的进程吗?如果在附加之前触发了代码,可能会感到不舒服,但这只是一个开始。

@MarcoGrassi这是我遇到的问题。我不知道如何触发捕获,因为直到调用执行后我才能附加。

#1 楼

我可以看到两个选项。




使用app_process手动启动Dalvik VM。命令行似乎类似于(请参阅am脚本源):新过程,并在调试器中手动跳过循环。


#2 楼

较新版本的Android实际上包含这样的机制。它使用jdwp发送信号以告知应用程序您已连接。请参阅NDK中的ndk-gdb脚本=)