自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 App冷启动阶段Open Dexfiles实现原理【ART虚拟机系列2】

本文分析了Android14中应用冷启动时DEX文件加载的代码时序与优化机制。通过AOSP源码可见,DEX加载始于ActivityThread的bindApplication方法,经过Binder调用AMS后,最终通过DexPathList和DexFile类完成核心加载流程。关键优化点包括:1)使用madvise系统调用异步预读DEX/OAT文件到页面缓存,减少缺页延迟;2)支持AppImage预加载机制加速类初始化。文章指出当前实现存在的主线程阻塞问题,建议将OpenDexfiles操作提前至子线程执行,

2025-08-14 19:31:32 306 1

原创 Android oatdump工具使用指南

oatdump 是分析 Android ART 运行时优化的核心工具,尤其适用于系统应用逆向、性能调优及崩溃分析。通过导出 Dex、反汇编机器码、过滤类方法等功能,为开发者提供了底层洞察能力。

2025-08-14 11:44:34 315 1

原创 Android异常信号处理详解【fwk->kernel】

序号信号类型数值说明触发原因1SIGABRT6Abort Signal(终止信号),表示程序因内部错误主动终止运行。通常由 abort() 函数显式触发。1)显式调用 abort():如断言失败(assert())、库函数检测到不可恢复错误(如内存分配失败)。2)未捕获的异常:某些语言(如 C++)中未处理的异常可能转换为 SIGABRT。2SIGBUS7Bus Error(总线错误),表示内存访问违反硬件对齐规则或地址无效。1)内存对齐错误(如访问未对齐的指针)

2025-08-05 20:33:20 1029 3

原创 Dex Verify实现流程及原理【ART虚拟机系列1】

Dex Verify是Android 系统对Dex文件进行合法性与安全性校验的核心流程。在介绍Dex Verify实现原理之前,先介绍下Dex文件,便于理解Verify实现原理。将多个.class字节码文件编译合成一个.dex字节码文件。Dex指令:Dex指令是Android虚拟机执行的底层操作码,通过寄存器架构直接操作数据和控制逻辑。每条指令由opcode和操作数组成。如,常见的opcode如const、move、invoke等,const/4表示将立即数存入寄存器。

2025-07-22 19:50:46 888

原创 Android system_server进程

Android system_server进程由zygote进程fork创建,是framework层的核心进程,主要由ASM、PMS等系统服务组成,给app提供Binder调用、与native & hal进程通信。

2024-11-20 11:27:52 1846 3

原创 Android 性能之 Game Mode

本文的目的是介绍 AOSP Game Mode 功能。Game Mode 功能的核心是系统服务 GameManagerService,在本文中用 GMS 指代 GameManagerService。在 API 26 之后,应用开发者可以通过将应用的 category 属性设置为 "game",使系统(即 GMS)能够将该应用识别为 "游戏"。GMS 定义了 4 种 game mode,即 1|2|3|4|standard|performance|battery|custom;

2024-10-21 21:37:26 2041

原创 kswap内存回收机制

kswapd是Linux内核中的一个内核线程(kernel thread),它的主要作用是负责内存回收。具体来说,当系统中的空闲内存低于一定的阈值(watermark)时,kswapd线程被唤醒并开始工作。swapd执⾏内存回收,主要包括两部分内存回收,进程的内存回收和内核内存的回收。进程的内存回收主要回收进程分配的page,例如进程分配的匿名⻚,映射的⽂件⻚、buffer cache等内存;

2024-09-29 19:47:57 1679 2

原创 Linux malloc内存分配实现原理

由于申请的内存没有归还系统,在内存工作繁忙时,频繁的内存分配和释放会造成内存碎片。brk()方式之所以会产生内存碎片,是由于brk通过移动堆顶的位置来分配内存,并且使用完不会立即归还系统,重复使用,如果高地址的内存不释放,低地址的内存是得不到释放的。2)malloc的实参是sizeof(int),用于指明一个整形数据需要的大小,如果我们写成p = (int *)malloc(1), 只是申请了一个字节的空间,如果向里面存放了一个整数的话,将会占用额外的3个字节,可能会改变原有内存空间中的数据。

2024-09-04 17:32:12 2705 5

原创 Linux kernel OOM机制详解

OOM机制(Out of Memory Killer)是Linux内核中的一种内存管理机制,用于在系统物理内存耗尽时选择并杀死一个或多个进程,以释放内存并防止系统崩溃。当系统无法满足新的物理内存分配请求,并且所有其他内存回收机制(如内存规整、页帧回收等)都失败时,OOM Killer会被触发。

2024-08-09 16:31:12 2751

原创 Android lmkd机制详解

Android lmkd采用epoll方式监听linux内核psi内存压力等级的触发事件,并根据psi内存压力等级及进程优先级(oom_adj)来选择目标进程并查杀,缓解系统内存的压力。

2024-07-24 16:06:11 3945 2

原创 Android 性能之刷新率设置和管理

对于 Android 平台来说,屏幕的刷新率会影响应用绘制的调度周期。一般情况下平台调度绘制的周期与屏幕刷新的周期同步,这是通过 vsync 机制来实现的。

2024-07-22 17:17:55 8032 5

原创 Android GWP-Asan机制详解

基本用途:GWP-ASan是一种原生内存分配器功能,在内存分配时额外记录一些信息,用于检测DOUBLE_FREE、USE_AFTER_FREE、INVALID_FREE、BUFFER_OVERFLOW、BUFFER_UNDERFLOW五种内存错误问题。

2024-07-19 19:54:32 3207 3

原创 hung 之 Android llkd

linux kernel的 hungtaskd(由 CONFIG_DETECT_HUNG_TASK使能)功能可以检测 hung tassk,即长时间处于 D状态的进程。lldk是 hungtaskd功能的用户空间平替(加强)。

2024-07-18 16:14:58 1247 1

原创 hung 之 watchdog 框架

本文的 watchdog框架是指 linux内核为硬件看门狗实现的通用的喂狗机制。

2024-07-18 10:44:36 1361 1

原创 hung 之 softlockup & hardlockup 检测

softlockup 指的是这样一种场景:由于内核程序设计问题,导致CPU长时间关闭抢占。hardlockup 指的是这样一种场景:由于内核程序设计问题,导致CPU时钟中断长时间禁用。softlockup 或 hardlockup 发生时,CPU被当前运行的任务独占,而其他任务得不到调度。

2024-07-16 20:31:54 1543

原创 hung 之 hung task 检测

hung本意是 "挂起",hung task本意即 "任务被挂起,得不到执行"。但是如果我们对 linux kernel的任务调度机制有所了解的话,应该会知道 "任务被挂起,得不到执行"是很正常的事情。而在 linuxkernel中,hung task 是指长时间处于 D 状态(TASK_UNINTERRUPTIBLE,即 uninterruptible sleep)的进程。

2024-07-16 20:30:22 748

原创 Linux CoreDump机制详解

当用户程序运行过程中发生异常, 程序异常退出时, 由Linux内核把程序当前的内存状态信息(运行时的内存,寄存器状态,堆栈指针,各种函数调用堆栈信息等)存储在一个core文件中, 这个过程称作coredump.

2024-07-12 10:42:41 5368 3

原创 Linux kfence机制详解

kfence是Linux kernel中用于检测内存错误的工具,如检测out-of-bounds、mem-corruption、use-after-free、invaild-free等,利用该工具尽早发现项目中存在的内存错误问题,帮助研发人员快速定位分析这些问题。

2024-07-02 20:09:05 1921 4

原创 Android HWASAN机制详解

HWASAN是在ASAN的基础上做了拓展,因此在介绍HWASAN之前先了解下ASAN.

2024-07-02 19:49:17 2846 1

原创 Linux KASAN使用与实现原理

类型影子内存标记检测类型buddy初始化:0释放:0xffslubTBDTBDglobal初始化:0xf9stackTBDTBD。

2024-04-23 16:32:54 2547 8

原创 Android malloc_debug实现原理及使用

2)设置 __libc_globals 对象中的 libc_globals.default_dispatch_table 和 current_dispatch_table 指向 malloc_dispatch_table,以后在 malloc 库函数里都会通过 GetDispatchTable(),这个函数就是返回的 current_dispatch_table 指针;MAX_FRAMES 表示被抓取的 frames 的数量,如果设为0, 表示在分配空间被释放时,不会抓取任何调用栈。

2024-04-23 10:55:46 2735 5

原创 常用的git命令

解决冲突后,使用 ​git add ​ 将冲突文件标记为已解决,然后使用 ​git rebase --continue​ 继续应用剩余的提交。git reset --hard HEAD^ ---撤销本地代码仓库提交的文件,且删除该文件的修改记录,且删除commit提交记录。git reset --mixed HEAD^ ---撤销本地代码仓库提交的文件恢复到本地工作区中,且删除commit提交记录。git restore --staged ---撤销暂缓区提交的件到工作区。

2024-03-13 15:04:42 626 2

原创 Linux freezer机制

系统进入suspended或进程被加入到cgroup冻结或解冻分组,用户进程和部分内核线程被冻结后,会剥夺执行cpu资源,解冻或唤醒后恢复正常。

2024-02-22 16:56:10 1610 7

原创 Kernel panic流程及处理

kernel panic主要包括die和panic两部分流程。

2024-02-20 16:42:41 1767 2

原创 Linux CFS调度器

CFS调度器目标是实现各进程完全公平调度。就绪队列维护一颗红黑树,并采用虚拟运行时间来实现时间片的分配。动态计算每个进程的虚拟运行时间,从而实现公平性和高效性。

2024-02-19 15:32:51 1432 1

原创 快稳省领域分析工具总结

ftrace、perf tool、simpleperf、systrace、perfetto、traceview、ebpf、cma tool、MAT、iotop\iostat\atop\top\strace\vmstat、QT tool、systemtap、Dtrace等。

2024-02-19 15:20:59 508 1

原创 Linux Thermal框架

Linux的Thermal机制是基于Zone为单位的热管理机制,核心包括三个部分:获取区域温度的设备thermal_zone_device、区域降温的设备thermal_cooling_device、温控策略thermal_governor。thermal_governor从thermal_zone_device获取区域温度,然后根据当前温度,决定调用哪个降温设备来为该区域降温。

2024-01-22 15:39:04 2118 1

原创 MTE - 堆内存检测原理

MTE 堆内存检测的硬件(指令)基础和 MTE 栈内存检测是一样的~不同的是 MTE 栈内存检测的用户空间实现是编译器(llvm)完成的~而 MTE 堆内存检测的用户空间实现则是由内存分配器(scudo,llvm 的运行时库)完成的(of course,如果不使用scudo而使用其他的内存分配器,应用程序也可以通过调用 MTE 指令或者封装的 MTE 相关 api 来实现堆内存检测,只是会比较麻烦,一般不会这么做 ~~~)

2024-01-18 14:07:04 1393 1

原创 MTE - 栈内存检测原理

MTE 属于 ARMv8.5 指令集的拓展功能~ 即 memory tag extension~要使能MTE功能,需要有支持 MTE 的硬件,kernel,以及编译器和libc(定制malloc等堆内存分配方法)~其中,支持MTE的硬件和kernel是必要条件~支持MTE的编译器是实现 stack 检测的必要条件~支持MTE的libc是实现 heap 检测的必要条件~

2024-01-18 13:45:54 2243 4

原创 Linux cpu dvfs机制

主要作用是动态调整CPU的电压和频率,以在性能和功耗之间实现平衡。当CPU负载较轻时,可以通过降低电压和频率来降低功耗,延长电池续航时间;当CPU负载较重时,可以通过提高电压和频率来提高性能,确保系统的响应速度。

2024-01-16 19:00:47 2921 6

原创 Android WatchDog机制

Android系统中,有硬件WatchDog用于定时检测关键硬件是否正常工作,类似地,在framework层有一个软件WatchDog用于定期检测关键系统服务是否发生死锁事件、Handler线程消息处理是否超时。

2024-01-10 15:50:26 1263

原创 Android Native crash触发原理及处理

当程序执行以下操作,会触发native crash:1)程序自己调用 abort() 函数触发,用于表示出现严重的错误或异常情况,需要终止程序执行2)内存对齐错误或非法地址访问3)零除错误(除数为零),浮点溢出或下溢出等4)使用了非法的机器指令或指令参数不当而导致5)进程试图访问不允许访问的内存地址,例如访问已释放的内存,或者栈溢出等6)常见于协处理器栈错误或FPU错误7)进程试图执行未定义或不支持的系统调用8)程序的特定位置设置断点时会触发SIGTRAP信号。

2024-01-10 15:43:33 2585 4

原创 Linux cpu Idle机制

cpu idleu作用:在cpu空闲状态下进入低功耗模式,从而达到节省功耗的目的。idle低功耗模式主要的省电策略:1)wfi 2)关闭cpu时钟 3)关闭设备等实现原理:linux内核初始化时,会为每个cpu创建一个idle线程,当该cpu处于空闲状态,即cpu上没有可调度的线程或可执行的task,此时调度器会选择idle线程执行,进入idle低功耗状态。而idle状态又分为不同的层级,越深的层及省电越优,但系统恢复越慢,因此需要结合用户需求,选择进入哪个层级的idle状态。

2024-01-02 19:33:50 6903 8

原创 Android PowerManagerService服务详解

PMS作用:1)向上提供给应用程序接口,例如音频场景中保持系统唤醒、消息通知中唤醒手机屏幕场景;2)向下决策HAL层以及Kernel层来控制设备待机状态,控制显示屏、背光灯、距离传感器、光线传感器等硬件设备的状态;

2023-12-23 17:49:32 4857 1

原创 Android&Linux系统suspend/resume机制

Linux内核提供了多种休眠(休眠)方式:freeze(idle)、standyby、STR(suspend to ram)和STD(suspend to disk),这些休眠方式通过文件节点/sys/power/state提供给用户操作,在用户空间通过向/sys/power/state文件节点分别写入freeze、standy、mem、disk,系统就会进入相应的状态。另一方面,在用户需要系统工作的时候,系统能够快速恢复电源、时钟、芯片内部ip及外部设备的工作,从而不影响用户的使用体验。

2023-11-24 11:07:31 4882 2

原创 Android Thermal机制【app至driver】

Android 引入了热系统,用于将热子系统硬件设备的接口抽象化,硬件接口包括设备表面、电池、GPU、CPU 和 USB 端口的温度传感器和热敏电阻。借助该框架,设备制造商和应用开发者可以主动获取这些系统硬件设备的温度数据,或者通过注册的回调函数(位于 PowerManager 类中)接收高温通知,进而在设备开始过热时调整系统及应用执行策略,降低系统负载。例如,当系统温度较高时,可以通过一些温控策略来降低设备温度,如cpu降频、关闭子设备等。

2023-11-15 17:08:25 3903 10

原创 Android Wakelock管理【app至kernel】

wakelock流程[图片]

2023-11-09 15:26:03 3574 8

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除