0x00 为什么需要单步调试?
在写程序中很有可能会遇到,感觉自己写的很OK,但系,怎么都得不到正确的运行结果。最后看了无数次代码才发现自己某些代码写了一点点小错误。单步调试这个东西,可以快速帮我们找到bug,提升效率。
那么,对于xposed插件这种东西,他运行在别人的进程里面,也可以动态调试吗?答案是肯定的,当然可以动态调试啊。
0x01 准备一个测试app
写一个简单的app,弄一个输入框,输入helloworld就提示成功,否则提示失败。代码很简单,如下:
app核心代码0x02 编写xposed插件
插件写起来很简单,就是hook住check方法,然后打印一个log,再返回结果为true。代码如下:
xposed插件代码0x03 动态调试
Xposed插件的handleLoadPackage方法是在app启动的时候执行的,所以如果你要在这个方法下断点,应该需要debug模式来启动。而new XC_MethodHook()所写的代码在每次函数调用前后都会触发,这也是我们写的xposed插件代码核心的位置,也是大部分时候我们所需要去调试的地方。调试方法如下:
下面步骤中xposed插件都统称“插件”,需要被hook的应用都统称“目标应用”
1. 安装插件并重启
2. 启动目标应用
3. 在Android studio中下好断点
设置断点4. 点击`Attach debugger to Android process`,然后勾选`Show all process`,选择目标应用,点击ok
选择调试进程5. 在目标应用中做相应操作,触发需要hook的函数,执行到断点的时候就会断下来
调试界面0x04 总结
没啥需要总结的,调试xposed插件挺简单的,不过还是摆脱不了重启。用这个来找xposed插件的bug还是挺不错的。
网友评论