android 真机调试原始的init进程

init作为android用户态启动的第一个进程,是难以直接调试的,之前的文章讲了如何调试单独启动的init,参见(https://blog.csdn.net/lslxfhc/article/details/106076437),也就是在系统启动完成之后再启动一个init,这时候系统环境完全变了,不是init执行的原始环境了,调试起来并不能了解init真正的执行过程。

现在我介绍如何直接调试原始的init进程。虽然还是不能调试init的初始化,但其所接收命令的执行过程是可调试的,且是原汁原味的。先上个效果图:

这是中断所有进程后,init进程正在等待 

下面是,发出stop zygote后,init进程接收到命令:

简述基本的配置过程:更详细的配置过程参见(https://blog.csdn.net/lslxfhc/article/details/106076437

环境:windows10  + vs2017  + visualgdb + nexus5x

1.  首先 nexus5x 解锁后刷官方rom android 601,然后编译aosp android601针对bullhead的eng版本,修改init的优化标志为-O0,也就是完全关闭优化,把编译好的init,打包进magisk包,nexus5x刷twrp后,用twrp刷打包好的magisk包,这样neuxs5x就同时获得了product 版rom,可隐藏的root,与调试要用的aosp源码匹配的init的定制版。

-----这里说下,用magisk的优点,可对应用隐身,以及隐藏root,以及绕过safety-net,magisk替换init是magisk官方不支持的,这是本人研究magisk源码的成果。详见:https://blog.csdn.net/lslxfhc/article/details/106169097

2.  visualgdb 创建一个linux交叉编译工程,连接到ubuntu1604上,自动同步android源码,本工程解决方案自动创建,再创建一个visualgdb的android工程,名称为init,选择execute工程,将工程添加到同一个解决方案。

3.  将init编译一次,并确保能正常调试这个无功能的init小程序,然后把aosp编译的init的符号文件android-6.0.1_r67/out/target/product/bullhead/symbols/init  覆盖到init小程序的符号目录中 init\obj\local\arm64-v8a/init ,然后是设置源码路径映射,因为aosp源码编译时路径和调试机也就是windows上不同,所以需要设置,否则调试器无法找到源码,源码上打断点也不会生效。再然后是android的调试设置为手动attach,因为init进程已经启动了。如下图:

最后当然是f5了,注意提示工程过期,不要编译,否则覆盖的init符号文件就失效了,然后双击init进程,如下:

 

 现在你可以在vs中找到init的源码打断点,愉快的调试了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值