[Debug]Native Exception学习(二)

1,android debuggerd学习

android debuggerd进程位于bionic/linker/debugger.c文件,system/core/debugger/目录下。

android user thread发生异常的过程,第一步,发生异常的thread被kernel扑捉到,kernel跳转到ARM的异常向量表,即0XFFFF0000位置(4G空间的最后一M),arm从user mode切换到abort mode,最终跳转到kernel里的异常处理函数,此时kernel根据异常类型发送信号给user thread,user thread在信号处理函数里通知debugged进程,debugged收到信号后用ptrace attach userthread并继续执行,并将信号处理恢复默认,此时userthread继续执行又发生异常,此时kernel手到异常直接发送信号给debugged进程,debugged进程用ptrace打印tombstone和log,最后保存coredump信息。

kernel给用户空间发送信号的时候,正常我们应用程序没有注册信号处理函数,那么如何接收kernel的信号处理函数了?

答:android上用户空间的执行,正常都是由/system/bin/linker来将应用程序所需要的动态库加载进进场的地址空间,linker的代码位于/bionic/linker/linker.c,在该文件里的__linker_init()函数里会首先调用debugger_init()函数,而在debugger_init()函数里注册信号处理函数。

用户空间应用程序执行的过程:

Kernel/fs/exec.c(do_execve())---->serach_binary_handler()------->binfmt_elf.c(load_elf_binary())----->load_elf_interp()

ptrace介绍:

ptrace介绍

ptrace详细解释

时间: 2024-10-20 15:53:16

[Debug]Native Exception学习(二)的相关文章

[Debug]Native Exception学习(一)

1,谷歌提供的arm-linux-androideabi-addr2line工具学习 点击打开链接 点击打开链接 2,哪些情况会发生Native exception (1)代码主动发生异常,调用abort()函数. 描述:abort()函数首先解除进程对SIGABRT信号的阻止,然后向调用进程发送该信号.abort()函数会导致进程的异常终止除非SIGABRT信号被捕捉并且信号处理句柄没有返回. abort()函数导致所有的流被关闭和冲洗,但是一般不会释放内存页,所以一般不建议使用. abort

[Debug]Native Exception学习(三)——signal

一,常见的信号的含义 SIGHUP (1) (POSIX) [终止]用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联SIGINT (2) (ANSI) [终止]程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出,用于通知前台进程组终止进程SIGQUIT (3) (POSIX) [终止+coredump]和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制.

Jetty学习二:配置概览-怎么配置Jetty

Jetty POJO配置 Jetty的核心组件是Plain Old Java Objects(POJOs):配置Jetty的大部分工作就是在Jetty POJOs上的初始化.装配和设置域的处理,你能通过以下的方式来实现:  1)直接通过Java代码初始化和装配Jetty对象.这个在后面Embedding Jetty讲. 2)用Jetty XML配置(一个控制反转(IoC)框架)初始化和装配Jetty对象.etc/jetty.xml文件是基本的Jetty XML配置文件,但有一些其它的etc/je

log4j学习二-log4j认识

log4j(标准日志工具)三大组件: logger appender layout 例如: ? 1 2 3 log4j.logger.myTest2=INFO,B   log4j.appender.B=org.apache.log4j.ConsoleAppender   log4j.appender.B.layout=org.apache.log4j.PatternLayout  日志级别: off---------------------------------最高等级的,用于关闭所有日志记录

gmock学习二 转载

Google Mock启蒙篇 [2] (Google C++ Mocking Framework for Dummies 翻译) 2011-11-22 22:34:58|  分类: C++ |  标签:google  mock  测试  |举报|字号 订阅 Setting Expectations 成功地使用Mock对象的关键是在它上面设置合适的期望.如果你设置的期望太过严格,你的测试可能会因为无关的改变而失败.如果你把期望设置的太过松驰,bugs可能会溜过去.而你需要的是你的测试可以刚好捕获你

puppet基础学习(二)

puppet基础学习(二) 六.ResourceOrdering(资源定序) 使用变化参数before , require , notify , subscribe catalog是对一个给定的系统的所有资源及关系的编译,在编译catalog时,除非我们指定资源的执行顺序,不然puppet是以其自己的顺序管理,大多数时候puppet指定适当的方式,例如puppet管理用户gigabyte应该存在和文件夹/home/gigabyte/bin应该存在并属于用户gigabyte时,puppet会自动指

[Python 学习] 二、在Linux平台上使用Python

这一节,主要介绍在Linux平台上如何使用Python 1. Python安装. 现在大部分的发行版本都是自带Python的,所以可以不用安装.如果要安装的话,可以使用对应的系统安装指令. Fedora系统:先以root登入,运行 yum install python Ubuntu系统:在root组的用户, 运行 sudo apt-get install python 2. 使用的Python的脚本 Linux是一个以文件为单位的系统,那么我们使用的Python是哪一个文件呢? 这个可以通过指令

OpenCV for Python 学习 (二 事件与回调函数)

今天主要看了OpenCV中的事件以及回调函数,这么说可能不准确,主要是下面这两个函数(OpenCV中还有很多这些函数,可以在 http://docs.opencv.org/trunk/modules/highgui/doc/user_interface.html 找到,就不一一列举了),然后自己做了一个简单的绘图程序 函数如下: cv2.setMouseCallback(windowName, onMouse[, param]) cv2.createTrackbar(trackbarName,

Makefile持续学习二

Makefile概述 一.Makefile里有什么? Makefile里主要包含5个东西:显式规则.隐晦规则.变量定义.文件指示和注释 1.显式规则:显式规则说明如恶化生成一个或多的目标文件,包含要生成的文件,文件的依赖文件,生成的命令 2.隐晦规则:由make自动推动功能完成 3.变量定义:变量一般都是字符串,类似C语言中的宏定义,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上 4.文件指示: 在一个Makefile中引用另一个Makefile 根据某些情指定Makefil