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的源码打断点,愉快的调试了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android开发中,调试是一种在实的Android设备上运行和调试应用程序的方法。为了进行调试,您需要完成以下准备工作: 1. 首先,在Android设备上启用USB调试功能。您可以通过以下步骤来启用USB调试: a. 在设备上打开设置并找到"关于手"选项。 b. 连续点击版本号七次,直到您看到"您已进入开发者模式"的提示。 c. 返回到"设置"主屏幕,点击"系统",然后点击"开发者选项"。 d. 如果您没有看到"开发者选项",请点击"高级选项"。然后点击"开发者选项",并将USB调试开关打开。 2. 然后,您需要在Android Studio中配置您的应用程序以支持调试。您可以按照以下步骤进行操作: a. 打开您的项目,并在项目目录中找到build.gradle文件。 b. 在该文件中,找到"android"部分,并在其中的"buildTypes"块中添加以下代码: ``` android { buildTypes { debug { debuggable true } } } ``` c. 保存并关闭build.gradle文件。 3. 现在,您可以将您的Android设备连接到计算上,并在Android Studio中运行您的应用程序进行调试。确保您的设备已正确连接,并且在Android Studio的设备列表中可见。 通过完成以上步骤,您可以成功进行Android调试,并在实设备上测试和调试您的应用程序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【安卓调试】较全面的Android调试详解](https://blog.csdn.net/huang3513/article/details/126168033)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [调试Android](https://blog.csdn.net/qq_45735705/article/details/129201183)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值