Linux内核调试方法总结之ptrace
ptrace
【用途】
进程跟踪器,类似于gdb watch的调试方法
【原理】【详细说明参考man ptrace帮助文档】
ptrace系统调用主要是父进程用来观察和控制子进程的执行过程、检查并替换子进程执行序列或者寄存器值的一种手段。主要用于实现断点调试和跟踪系统调用。
【接口说明】
#include <sys/ptrace.h>
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
|
序号 |
宏定义 |
说明 |
|
1 |
PTRACE_TRACEME |
子进程通知内核该进程被父进程trace |
|
2 |
PTRACE_PEEKTEXT |
偷看子进程的代码段 |
|
3 |
PTRACE_PEEKDATA |
偷看子进程的数据段 |
|
4 |
PTRACE_PEEKUSER |
偷看子进程的用户数据 |
|
5 |
PTRACE_POKETEXT |
篡改子进程的代码段 |
|
6 |
PTRACE_POKEDATA |
篡改子进程的数据段 |
|
7 |
PTRACE_POKEUSER |
篡改子进程的用户数据 |
|
8 |
PTRACE_GETREGS |
读取子进程的寄存器值 |
|
9 |
PTRACE_GETFPREGS |
读取子进程的浮点型寄存器值 |
|
10 |
PTRACE_GETSIGINFO |
查看导致子进程中止执行的信号量的信息 |
|
11 |
PTRACE_SETREGS |
设置子进程寄存器值 |
|
12 |
PTRACE_SETFPREGS |
设置子进程浮点型寄存器值 |
|
13 |
PTRACE_SETSIGINFO |
设置子进程响应的信号量 |
|
14 |
PTRACE_SETOPTIONS |
设置跟踪选项 |
|
15 |
PTRACE_GETEVENTMSG |
获取ptrace事件信息,并保存到父进程的数据段 |
|
16 |
PTRACE_CONT |
父进程中调用,通知子进程继续执行 |
|
17 |
PTRACE_SYSCALL |
|
|
18 |
PTRACE_SINGLESTEP |
单步调试 |
|
19 |
PTRACE_SYSEMU |
|
|
20 |
PTRACE_SYSEMU_SINGLESTEP |
多步调试 |
|
21 |
PTRACE_KILL |
删除子进程的跟踪器 |
|
22 |
PTRACE_ATTACH |
附加跟踪器到子进程上 |
|
23 |
PTRACE_DETACH |
移除子进程上的跟踪器 |
Linux内核调试方法总结之ptrace的更多相关文章
- Linux内核调试方法总结
Linux内核调试方法总结 一 调试前的准备 二 内核中的bug 三 内核调试配置选项 1 内核配置 2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() 2 ...
- Linux内核调试方法总结【转】
转自:http://my.oschina.net/fgq611/blog/113249 内核开发比用户空间开发更难的一个因素就是内核调试艰难.内核错误往往会导致系统宕机,很难保留出错时的现场.调试内核 ...
- 【转】Linux内核调试方法总结
目录[-] 一 调试前的准备 二 内核中的bug 三 内核调试配置选项 1 内核配置 2 调试原子操作 四 引发bug并打印信息 1 BUG()和BUG_ON() 2 dump_sta ...
- Linux内核调试方法【转】
转自:http://www.cnblogs.com/shineshqw/articles/2359114.html kdb:只能在汇编代码级进行调试: 优点是不需要两台机器进行调试. gdb:在调试模 ...
- Linux内核调试方法总结之反汇编
Linux反汇编调试方法 Linux内核模块或者应用程序经常因为各种各样的原因而崩溃,一般情况下都会打印函数调用栈信息,那么,这种情况下,我们怎么去定位问题呢?本文档介绍了一种反汇编的方法辅助定位此类 ...
- Linux内核调试方法总结之栈帧
栈帧 栈帧和指针可以说是C语言的精髓.栈帧是一种特殊的数据结构,在C语言函数调用时,栈帧用来保存当前函数的父一级函数的栈底指针,当前函数的局部变量以及被调用函数返回后下一条汇编指令的地址.如下图所示: ...
- Linux内核调试方法总结之序言
本系列主要介绍Linux内核死机.异常重启类稳定性问题的调试方法. 在Linux系统中,一切皆为文件,而系统运行的载体,是一类特殊的文件,即进程.因此,我尝试从进程的角度分析Linux内核的死机.异常 ...
- Linux内核调试方法总结之ddebug
[用途] Linux内核动态调试特性,适用于驱动和内核各子系统调试.动态调试的主要功能就是允许你动态的打开或者关闭内核代码中的各种提示信息.适用于驱动和内核线程功能调试. [使用方法] 依赖于CONF ...
- Linux内核调试方法总结之调试宏
本文介绍的内核调试宏属于静态调试方法,通过调试宏主动触发oops从而打印出函数调用栈信息. 1) BUG_ON 查看bug处堆栈内容,主动制造oops Linux中BUG_ON,WARN_ON用于调试 ...
随机推荐
- glVertexAttribPointer 顶点数据解析方式
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0); 第一个参数指定从索引0开始取数据,与顶点着色器中layout(location=0)对应. ...
- js获取url中的参数(解决中文乱码)
这个是封装好的方法: function getQueryString(name) { var reg = new RegExp("(^|&)" + name + " ...
- 1、Java语言概述与开发环境——Java特性和技术体系平台
一.Java语言的主要特性 1.Java语言是易学的: Java语言的语法与C语言和C++语言很接近,使得大多数的程序员很容易学习和使用Java. 2.Java语言是强制面向对象的: Java语言提供 ...
- 环境变量和Path环境变量
环境变量 百度百科下的定义 一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等. 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所 ...
- java 如何重写equal 和hashcode方法(最佳实践)
先看完理解这篇:Java hashCode() 和 equals()的若干问题解答 实现高质量的equals方法的诀窍包括 使用==操作符检查“参数是否为这个对象的引用”: 使用instanceof操 ...
- 基于gulp的前端自动化方案
前言 最近几年前端技术发展日新月异,特别是单页应用的普及.组件化.工程化.自动化成了前端发展的趋势.webpack已经成为了前端打包构建的主流,但是一些老古董的项目还是存在的,也有优化的必要,正好 ...
- LazyMan的深入解析和实现
一.题目介绍 以下是我copy自网上的面试题原文: 实现一个LazyMan,可以按照以下方式调用: LazyMan("Hank")输出: Hi! This is Hank! L ...
- axios 文件流下载
this.axios .post(this.baseUrl+"/exportUser", { admin: "",keys: "",keyw ...
- mysql使用MRG_MyISAM(MERGE)实现水平分表
在MySQL中数据的优化尤其是大数据量的优化是一门很大的学问,当然其它数据库也是如此,即使你不是DBA,做为一名程序员掌握一些基本的优化信息,也可以让你在自己的程序开发中受益匪浅.当然数据库的优化有很 ...
- IPv6地址格式示例及IPv6与IPv4的区别分析
认识IPv6地址 IPv4地址是类似 A.B.C.D 的格式,它是32位,用\".\"分成四段,用10进制表示: 而IPv6地址类似X:X:X:X:X:X:X:X的格式,它是128 ...