自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

兰宝的专栏

编程之美

  • 博客(24)
  • 收藏
  • 关注

原创 use after free 引起KE

问题背景:待机状态下,按Power键或者自动进入休眠,必现KE。分析过程:取出mtklog看到有db产生,确实发生了KE(kernel exception),取出db和vmlinux (必须是和当前软件是同一次编译的)后,使用GAT工具解开db,取出SYS_MINI_RDUMP,使用 gdb调试:$ arm-linux-androideabi-gdb v

2016-10-12 17:47:26 822

原创 进程上下文VS中断上下文

内核空间和用户空间是现代操作系统的两种工作模式,内核模块运行在内核空间,而用户态应用程序运行在用户空间。它们代表不同的级别,而对系统资源具有不同的访问权限。内核模块运行在最高级别(内核态),这个级下所有的操作都受系统信任,而应用程序运行在较低级别(用户态)。在这个级别,处理器控制着对硬件的直接访问以及对内存的非授权访问。内核态和用户态有自己的内存映射,即自己的地址空间。处理器总处于以下状态

2016-10-10 11:51:34 268

原创 Linux vm运行参数之(二):OOM相关的参数

一、前言本文是描述Linux virtual memory运行参数的第二篇,主要是讲OOM相关的参数的。为了理解OOM参数,第二章简单的描述什么是OOM。如果这个名词对你毫无压力,你可以直接进入第三章,这一章是描述具体的参数的,除了描述具体的参数,我们引用了一些具体的内核代码,本文的代码来自4.0内核,如果有兴趣,可以结合代码阅读,为了缩减篇幅,文章中的代码都是删减版本的。按照惯例,最后一

2016-10-09 18:01:01 2835 1

原创 sizeof用法总结

1. 定义: sizeof是何方神圣?sizeof乃C/C++中的一个操作符(operator)是也,简单的说其作用就是返回一个对象或者类型所占的内存字节数。 MSDN上的解释为: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (inclu

2016-10-17 11:06:14 6799 2

原创 malloc()与 alloc()区别

malloc()与 alloc()C语言跟内存分配方式(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3)

2016-10-17 10:31:20 622

原创 alloc

函数alloc是可返回一个指向n个连续字符存储单元的指针,alloc函数的调用者可以利用该指针存储字符序列。alloc函数的使用编辑函数afree(p)释放已经分配的存储空间,以便以后使用。之所以说这两个函数是“不完善”的,是因为对afree函数的调用次序必须与调用alloc函数的次序相反。换句话说,alloc与afree以栈的方式(即后进先出的列表)进行存储空

2016-10-17 10:30:49 2851

原创 [FAQ11422]如何开启fdleak调试功能

[DESCRIPTION]fdleak 顾名思义就是File Descriptors 泄漏,即操作完File后,没有回收File Descriptors,从而导致FileDescriptors被耗尽。即类似于memory leak。[SOLUTION]fdleak调试功能仅在eng版本中支持,所以务必用eng版本进行设置&debug。如果是KK及以前的版本在调试前请确认当前的c

2016-10-14 18:05:48 1649

原创 linux下rwx权限数字解释

chmod也可以用数字来表示权限如 chmod 777 file 语法为:chmod abc file 其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。 r=4,w=2,x=1 若要rwx属性则4+2+1=7; 若要rw-属性则4+2=6; 若要r-x属性则4+1=7。 范例: chmod a=rwx file  和 chmod

2016-10-14 17:44:11 2045 1

原创 Linux系统文件目录权限详解 - rwx

Linux系统对文件的权限分为读(Read), 写(Write), 可执行(Exeute),对于操作者又分为三种不同的身份:文件所有者,用户组,其他人。gilbert@gilbert-xp:~/test$ ls -ltotal 0-rw-r--r-- 1 gilbert gilbert 0 2013-03-16 14:50 readme一、文件权限1. 读(r)

2016-10-14 17:43:24 727

原创 [FAQ18285]如何用MMU保护slub?

[DESCRIPTION]看过[FAQ14614]如何用MMU保护buddy system?就知道如果踩到空洞就会直接崩溃,是检测和解决问题的最好方法,不过踩坏不一定就落在空洞,这也导致了调试难度。在quick start里有专题讲解踩内存问题:MediaTek On-Line> Quick Start> 踩内存专题分析kernel里大范围使用的是slu

2016-10-14 17:10:35 550

原创 [FAQ14383]如何在内核打开栈保护功能?

[DESCRIPTION]内存踩坏一般都很难排查问题,需要借助各种调试方法找出问题点。不同的内存踩坏有不同的调试方法,这里介绍下内存踩坏中的一种:栈帧溢出。栈帧溢出是指:在某个函数内踩坏了不属于该函数的栈帧。举例:[C/C++]hide12345678910

2016-10-14 16:54:29 1451

原创 [FAQ14614]如何用MMU保护buddy system?

[DESCRIPTION]Memory corruption如何解决/预防?这种问题通常都很难debug,需要多次调试甚至借助jtag分析问题。踩坏的当下,系统不一定发生崩溃,有可能踩坏的memory是别人用的,只有别人在使用那块memory时才有可能发生异常。但如果踩的memory是不可访问的(比如被MMU设置为不可读写),那么直接就发生崩溃了。这样的问题就很轻易抓到。

2016-10-14 16:53:53 974

原创 [FAQ19076]如何查看slub内存申请/释放的调用栈

[DESCRIPTION]踩内存是最难调试的问题之一,kernel里大部分kernel结构体都是从slub分配出去的,因此slub踩内存也是常见的问题。通常遇到踩内存,我们会切换的eng版本复现,eng版本有开slub debug功能,会对free memory填充0x6b,pad填充0x5a等等,同时还会记录申请和释放的调用栈,可以轻易查出use after free问题。

2016-10-14 16:52:57 931

原创 [FAQ18316]增大minidump地址范围

[DESCRIPTION]minidump是发生KE会抓取内容的elf文件,用于gdb、trace32解析。因此minidump对KE是非常重要的。不过minidump保存的内容有限,范围也有限,导致有些问题的分析无法深入。范围是只允许PAGE_OFFSET~high_memory。对于vmalloc区域和mem_map区域就不会被保存,导致发生在vmalloc、page struct

2016-10-14 16:51:53 498

原创 [FAQ19108]如何用MMU增强保护buddy system?

[DESCRIPTION]这个FAQ是[FAQ18285]如何用MMU保护slub?和[FAQ14614]如何用MMU保护buddy system?的结合并增强,因此请导入这个FAQ之前先删除上2个FAQ的改动,然后在根据这个FAQ导入。该FAQ彻底随机化从buddy system申请的内存,有效抓取use after free和memory corruption问题。注意:该FAQ只

2016-10-14 16:50:48 555

原创 [FAQ18276]增强slub越界调试功能

[DESCRIPTION]踩内存通常很难排查,原因在于踩内存的时候不一定崩溃,所以我们要千方百计加强各种内存检查。在quick start里有专题讲解踩内存问题:MediaTek On-Line> Quick Start> 踩内存专题分析kernel中使用的内存大部分来自slub,因此slub的调试非常重要。slub本身是自带调试功能的,不过只有eng版本有开,us

2016-10-14 16:48:45 1786

原创 \0

‘\0’是c/c++语言中的字符串结束符,在ASCII字符集中对应空字符NULL。中文名\0属    性c/c++语言中的字符串结束符位    置存储在字符串的结尾ASCII字符对应数字0目录1 简介2 分析简介编辑\0是C++中字符串的结尾标志,存储在字符串

2016-10-12 17:18:28 593

原创 警告背后的use after free

问题背景:工模测试出现自动重启。分析过程:用GAT解开db,并结合对应的vmlinux(该文件必须和db一致,具体请看FAQ06985),利用工具E-Consulter分析(也可以参考FAQ13941),分析里几个db发现都是内存踩坏,随机踩,这种情况要么是软件引入的,要么是硬件故障。做以下调查:单体复现还是多台机器出现?什么时候出现?之前是否就存在?复现概

2016-10-11 18:00:32 2180

原创 TEE踩坏浮点寄存器引起SF NE

问题背景:reboot测试,surfaceflinger 出现NE高概率复现!M1.MP3版本分析过程:用GAT解开db,并结合对应的symbols文件(symbols目录里的文件必须和db一致),利用工具E-Consulter分析,分析报告如下:== 异常报告v1.7(仅供参考) ==报告解读: MediaTek On-Line> Quick Start> E

2016-10-11 17:46:18 801

转载 踩内存专题分析

kernel内存种类先了解下kernel内存种类,才知道如何针对分析。全局变量这个最直接,直接在驱动里定义全局变量就可以拿来使用,不过要注意互斥访问。内存是分配在.data/.bss段的。局部变量定义在函数内部的变量,分配在栈帧内的。由于kernel对栈大小有限制,ARM32位是8K,ARM64位是16K,因此不能定义太大的变量,否则容易造成栈溢出。

2016-10-11 16:01:54 6026

转载 DMA技术

5.1  DMA概述  DMA是指外部设备不通过CPU而直接与系统内存交换数据的接口技术。  要把外设的数据读入内存或把内存的数据传送到外设,一般都要通过CPU控制完成,如CPU程序查询或中断方式。利用中断进行数据传送,可以大大提高CPU的利用率。    但是采用中断传送有它的缺点,对于一个高速I/O设备,以及批量交换数据的情况,只能采用DMA方式,才能解决效率和速度问题。

2016-10-11 14:46:44 316

原创 内存泄漏专题分析

问题背景用Launcher跑monkey时存在泄露,2个小时USS从65M涨到205分析过程打开debug 15复测,adb shell dumpsys meminfo查看launcher memory用量如果大于300M时,(1)adb shell dumpsys meminfo 抓取一份launcher memory使用信息(2)adb shell kill

2016-10-10 15:18:15 3181

转载 C语言知识点

总体上必须清楚的: 1)程序结构是三种:  顺序结构 、选择结构(分支结构)、循环结构。 2)读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。 3)计算机的数据在电脑中保存是以 二进制的形式. 数据存放的位置就是 他的地址. 4)bit是位 是指为0 或者1。 byte 是指字节, 一个字节 = 八

2016-10-10 11:54:20 1344 1

转载 内存泄漏专题分析

kernel的内存泄漏和native类似,不过原生的kernel就有集成内存回收和调试的功能。kernel设计的原则是不到万不得已就不做任何事情,比如内存尽量分配出去使用,实在没有内存才启动回收。网络有些文章讲解内存回收机制,可以参考:linux kernel内存回收机制内存回收机制内存水位对于内存是否回收是针对每个zone考量的。而考量的参数有high

2016-10-09 16:51:08 305

空空如也

空空如也

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

TA关注的人

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