我正在通过 Android 中的 Xposed 框架。专门阅读博客 - http://d3adend.org/blog/?p=589了解潜在的对策,并在这些线上有几个问题。
因此,当我们使用 Xposed 钩住一个方法时,框架将该方法作为原生方法并执行它想要钩住的代码。那么在stacktrace中如何调用原始方法呢?
com.example.hookdetection.DoStuff->getSecret //This one
de.robv.android.xposed.XposedBridge->invokeOriginalMethodNative
de.robv.android.xposed.XposedBridge->handleHookedMethod
com.example.hookdetection.DoStuff->getSecret //This one again
com.example.hookdetection.MainActivity->onCreate
android.app.Activity->performCreate
android.app.Instrumentation->callActivityOnCreate
android.app.ActivityThread->performLaunchActivity
android.app.ActivityThread->handleLaunchActivity
android.app.ActivityThread->access$800
android.app.ActivityThread$H->handleMessage
android.os.Handler->dispatchMessage
android.os.Looper->loop
android.app.ActivityThread->main
java.lang.reflect.Method->invokeNative
java.lang.reflect.Method->invoke
com.android.internal.os.ZygoteInit$MethodAndArgsCaller->run
com.android.internal.os.ZygoteInit->main
de.robv.android.xposed.XposedBridge->main
dalvik.system.NativeStart->main
还有为什么它在堆栈跟踪中出现两次。我想了解它们的执行顺序。
实际方法是否运行?由于挂钩的方法代码会执行,因此它不会理想地执行原始方法代码。那么我们怎么可能在知道它会被替换的情况下在相同的方法中添加一个跟踪检测机制。