- 博客(19)
- 资源 (2)
- 收藏
- 关注
原创 android 无死角调试计划
多年前曾沐浴在windows的荣光下,体验着visual studio提供的完美开发体验,不知其他平台开发工具的险恶。怀揣美好的向往,投入到android的怀抱,才发现世事艰辛。对于调试而言,android平台是个残暴的世界。对于native程序,曾操起gdb,寻找windbg的身影,确发现等价命令臃肿的可怕,它看起来就不是给人用的,很像个二次开发的api,当我想专注于调试时,我确不得不先专注于这个复杂的接口,让他更好用一些。windbg把用户当上帝,gdb把用户当小弟。话说android studio调试
2020-05-18 13:52:39
299
原创 android 真机调试原始的init进程
init作为android用户态启动的第一个进程,是难以直接调试的,之前的文章讲了如何调试单独启动的init,也就是在系统启动完成之后再启动一个init,这时候系统环境完全变了,不是init执行的原始环境了,调试起来并不能了解init真正的执行过程。现在我介绍如何直接调试原始的init进程。虽然还是不能调试init的初始化,但其所接收命令的执行过程是可调试的,且是原汁原味的。先上个效果图:这是中断所有进程后,init进程正在等待下面是,发出stop zygote后,init进程接收到命令:.
2020-05-17 23:09:59
782
原创 调试理论
关于调试,有很多想说的。简洁的说,调试是一种控制手段,用以提高人对软件的控制能力。作为软件从业者,尤其指开发人员,可能遇到如下场景:1. 程序崩溃,卡顿,占用大量内存。2. 软件很复杂,难以理解,不能建立简洁的心理模型。3. 编程接口复杂,缺乏文档。因为软件开发的本质就是复杂性控制,其复杂性来源于其环境的复杂性,环境包括:1. 需求复杂,随时间而变化。2. 接口复杂,几乎任何常见软件都建立在其它软件之上,并与第三方软件产生交互。3. 软件兼容产生复杂性,一个软件在发展过程中...
2020-05-17 09:12:28
463
原创 magisk 模块如何替换init
用magisk模块替换system分区中的文件特别简单,下载个模板,解压后system文件夹中放入要替换的文件,重新压缩后用twrp刷入即可。甚至boot分区中也能有限的替换个别文件,patch一些rc文件,但是替换init文件是官方不支持的,笔者经研究发现了一个可行办法做到这一点,记录在此。办法就是修改magisk的安装脚本,magisk的逻辑很复杂,但是需要做的修改非常简洁。1.D:\Downloads\Magisk-v20.4\common 中加入你自己编译的init,取名myinit:..
2020-05-17 07:02:15
3587
原创 android linker 源码调试
上篇文章介绍了init进程的调试,现在介绍linker的调试。linker 作为动态加载器是android系统上动态链接可执行文件的依赖文件,并且是首先执行的模块,同时它也是独立可执行的文件,不过独立执行时并不执行有用的功能,但我们可以略微调整代码,来调试感兴趣的函数。调试效果图:调试设置很简单,请参照上篇文件中init进程的调试设置。...
2020-05-12 21:14:41
573
1
原创 android init 进程源码调试探索
android 系统native进程有很多,其中比较重要的有init,zygote,installd,dex2oat等,native进程的调试是困难的,尤其是调试其初始化过程,原因是没有集成化调试环境,虽然gdb是可能的,但是对用户不具有易用性。android studio 随能调试so,但对native可执行文件无能为力。作为对比,visual studio作为宇宙最强ide,调试windows可执行文件的能力可以说是甩开android studio几条街。笔者经过研究,找到了媲美windows上的无缝调
2020-05-12 16:59:50
834
原创 android工程师的福音:5分钟内checkout任意版本android源码!
android工程师的福音:5分钟内checkout任意版本android源码!做android最大的痛苦莫过于获取android源码,由于众所周知的原因,从谷歌下载一个版本的源码困难重重,即使克服了网络障碍,也因源码巨大而耗时持久,据经验根据网络情况,耗时少则6,7天,多则个把月,有人说用国内镜像,但事实证明国内镜像因版权问题,提供的镜像是不完整的,并且即使用国内镜像,中间也会访问谷歌服务器...
2019-12-06 15:10:30
337
原创 你在追求什么?
无论谁,你一定有所追求,即使你宣称自己堕落... 当然,并不是谁都懂,谁都同意,那些不懂自己的人,很难明白我在说什么。 为了说明这件事,那就从自我说开去... 任何人,没有人生来就明白事理。生来一无所知,甚至语言都要从点滴学起。人们经常说起 “我” ,这个字,但没人知道从小到大,“ 我”这个概念是从哪一天形成的。同时,我们也肯定能意识到,刚出生
2014-05-02 02:04:07
517
原创 思维模型
以认知模型为基础 主要总结几个机制: 其一,预测机制 其二,创造机制 其三,预测内外客观机制 其四,创造内外客观机制 其五,预测内外主观机制 其六,创造内外主观机制 其七,主客交织机制 马克思是个伟人,创造了马哲。但他也仅仅是那个
2014-05-02 01:58:18
745
原创 计算机随想
计算机核心是CPU,其模型是DFA------有限自动机。 计算机能做很多事,其原因是什么?为什么它能模拟天气,模拟模拟植物,模拟动物,模拟人,甚至人类社会。从无机自然,到有机生命,计算机无所不能。 很多人怀疑,模拟这些事物,计算机还做不到。诚然当模拟规模巨大的事物的时候,计算机肯定不能做到我们所期望的精确性。然而,即便是最简单的物理过程,计
2014-05-02 01:55:34
490
原创 程序无能为力的领地
为什么精确的程序在复杂的环境中总会失败? 为什么生活中没有确定方法去指引我们成功的去做事? 这是程序固有的缺点,其根源在于环境的复杂性,变化性。这是程序化思维无法发挥作用的问题域。 但问题本身又不能脱离其环境,它高度依赖于复杂的环境。 那问题该怎样去处理呢? 当程序间通信频繁,模块
2014-05-02 01:54:13
481
原创 黑客的思维模式
对于黑客来说他们其实所痴迷的并不是技术。 他们所坚持的,并不是那种永不放弃的黑客精神。 他们所真正着迷的东西,是事物的本源与真相,他们是方法论的终极探究者。他们探究的是事物的抽象规则,事物的可能性。他们以技术作为一般表达方式,但却不局限于技术。在他们的大脑中整个人类社会都被抽象为信息处理,他们入侵的不只是电脑。他们以其炉火纯青的语言操纵能力
2014-05-02 01:49:28
1060
原创 终极逆向
逆向工程不应该局限于计算机领域。 它的威力应该发挥在人所接触的遇到的一切领域的问题之中。 黑客,侦探,科学家,政治领袖,他们都是逆向工程的身体力行者,黑客通过软件工具可以知道二进制代码的原始设计,侦探可以通过其调查手段及各种方法得知事实的真相,科学家通过科学研究方法获知物理世界的结构,政治领袖通过其社会活动,得知社会结构,及矛盾关系。
2014-05-02 01:48:11
419
原创 程序哲思(4)
你继续看的理由,应该是那个充满诱惑的“无尽的力量”吧。 那是需要付出代价的。我将继续为你铺路,请先相信最终会有“水到渠成”的效果。 看看那些牛人,牛的技术,那些经典代码,那些经典的架构,那些大师在创造并推动着计算机世界的一切。那些深邃的思想,那些极具穿透力的眼光,直达问题的本质,核心,让人望尘莫及。 如果你对计算,自动机,语言的背
2014-05-02 01:44:59
468
原创 程序哲思(3)
你此时已经隐约感到,程序已经在你的现实世界中,如空气一样。但是你还不确信,因为这种感觉才刚刚开始。 编程本身算是什么呢?是否是程序呢?是的。 编程是这样一个过程,你在大脑中首先有了一堆概念,有了概念就隐含的说明有了什么呢?一个概念定义了一个集合,有了概念的同时就有了概念上的操作,概念与数据类型,与集合是同一个东西。你这时候要达到一个目标或某种目的
2014-05-02 01:42:12
490
原创 程序哲思(2)
第一篇中,从未涉及程序是什么这个问题,让人懊恼,不过你将马上看到对这个问题的探讨。 先说下,集合上的运算。但愿你还记得什么是映射,什么是函数,如果你曾上过高中。简单例子说明如下: y=2*x 还记得这个简单的函数吧,应该初中就见过了。还记得,x叫做自变量,y叫做函数吧。这里规定x的取值来自集合{1,2,3,4,5},起个名叫集合X,y取值
2014-05-02 01:40:01
475
原创 程序哲思(1)
程序是什么?我将以这个话题开始,最终引出一套理论。 在通俗易懂与精确深刻之间,我还是偏向了后者,因为同时这是写给自己的总结,还有志同道合的程序员的。为了能达到精确深刻,我必须从抽象的集合论开始,这也实属是个无奈的选择。 当然,我所谓的精确,不是数学上的那种严格的精确,我以能够揭示本质为标准,会忽略掉一些不重要的东西,同时也会加强一些概念,甚至重新定义一些
2014-05-02 01:38:23
454
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人