linux之ptrace
经典博客:
Linux内存替换系列(包括实验 实验可行) 就是要注意下是64位还是32位的。。。。
https://blog.csdn.net/Dearggae/article/details/47379245
玩转ptrace:
http://www.cnblogs.com/wangkangluo1/archive/2012/06/05/2535484.html
ptrace系统调用
ptrace系统调从名字上看是用于进程跟踪的,它提供了父进程可以观察和控制其子进程执行的能力,并允许父进程检查和替换子进程的内核镜像(包括寄存器)的值。其基本原理是: 当使用了ptrace跟踪后,所有发送给被跟踪的子进程的信号(除了SIGKILL),都会被转发给父进程,而子进程则会被阻塞,这时子进程的状态就会被系统标注为TASK_TRACED。而父进程收到信号后,就可以对停止下来的子进程进行检查和修改,然后让子进程继续运行。
其原型为:
#include sys/ptrace.h
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
ptrace有四个参数:
1). enum __ptrace_request request:指示了ptrace要执行的命令。
2). pid_t pid: 指示ptrace要跟踪的进程。
3). void *addr: 指示要监控的内存地址。
4). void *data: 存放读取出的或者要写入的数据。
ptrace是如此的强大,以至于有很多大家所常用的工具都基于ptrace来实现,如strace和gdb。
来自 https://www.cnblogs.com/tangr206/articles/3094358.html
【描述】
提供父进程观察和控制另一个进程执行的机制,同时提供查询和修改另一进程的核心映像与寄存器的能力,主要用于执行断点调试和系统调用跟踪。
【功能】
Request参数决定了系统调用的功能:(第一个参数决定ptrace的行为也决定了接下来其它3个参数是怎样被使用的)
• PTRACE_TRACEME
本进程被其父进程所跟踪。其父进程应该希望跟踪子进程。
• PTRACE_PEEKTEXT, PTRACE_PEEKDATA
从内存地址中读取一个字节,内存地址由addr给出。
• PTRACE_PEEKUSR
从USER区域中读取一个字节,偏移量为addr。
• PTRACE_POKETEXT, PTRACE_POKEDATA
往内存地址中写入一个字节。内存地址由addr给出。
• PTRACE_POKEUSR
往USER区域中写入一个字节。偏移量为addr。
• PTRACE_SYSCALL, PTRACE_CONT
重新运行。
• PTRACE_KILL
杀掉子进程,使它退出。
• PTRACE_SINGLESTEP
设置单步执行标志
• PTRACE_ATTACH
跟踪指定pid 进程。
• PTRACE_DETACH
结束跟踪
Intel386特有:
• PTRACE_GETREGS
读取寄存器
• PTRACE_SETREGS
设置寄存器
• PTRACE_GETFPREGS
读取浮点寄存器
• PTRACE_SETFPREGS
设置浮点寄存器
init进程不可以使用此函数
来自 https://blog.csdn.net/Dearggae/article/details/47144393
将代码插入到自由空间
在前面的例子中我们将代码直接插入到了正在执行的指令流中,然而,调试器可能会被这种行为弄糊涂,所以我们决定把指令插入到进程中的自由空间中去。通过察看/proc/pid/maps可以知道这个进程中自由空间的分布。
小结:
ptrace函数可能会让人们觉得很奇特,因为它居然可以检测和修改一个运行中的程序。这种技术主要是在调试器和系统调用跟踪程序中使用。它使程序员可以在用户级别做更多有意思的事情。已经有过很多在用户级别下扩展操作系统得尝试,比如UFO,一个用户级别的文件系统扩展,它使用ptrace来实现一些安全机制。
来自 http://www.cnblogs.com/wangkangluo1/archive/2012/06/05/2535484.html
断点的实现原理,就是在指定的位置插入断点指令,当被调试的程序运行到断点的时候,产生SIGTRAP信号。
来自 https://www.cnblogs.com/tangr206/articles/3094358.html
linux之ptrace相关推荐
- linux 分析 ptrace
linux 分析 ptrace() 形式 #include <sys/ptrace.h> int ptrace(int request, int pid, int addr, int da ...
- Linux 系统调用 Ptrace 详解
From:https://blog.csdn.net/u012417380/article/details/60470075 Ptrace 详解:https://www.cnblogs.com/tan ...
- ptrace linux,【ptrace注入】linux下ptrace注入器的实现
[Asm] 纯文本查看 复制代码#include "iostream" #include #include #include #include #include #include ...
- Linux ptrace 原理,从gdb原理学习ptrace调用
Linux的ptrace系统调用,是Android二进制hook框架adbi的核心.因此学习adbi之前,先学习一下ptrace()函数. ptrace介绍 ptrace可以拆开来,看作Process ...
- linux各版本代码量,linux各版本对应溢出漏洞总结(溢出代码)
记录一下. 2.4.17 newlocal kmod 2.4.18 brk brk2 newlocal kmod km.2 2.4.19 brk brk2 newlocal kmod km.2 2.4 ...
- linux pipe 命名管道,linux 进程学习笔记-named pipe (FIFO)命名管道
与"无名管道"不同的是,FIFO拥有一个名称来标志它,所谓的名称实际上就是一个路径,比如"/tmp/my_fifo",其对应到磁盘上的一个管道文件,如果我们用f ...
- 常见问题总结性回答(转)
第一章------关于找软件 常用类软件: 华军软件 http://www.newhua.com/ (根据物理位置自行选择速度快的镜像) 中国下载 http://download.com.cn/ (使 ...
- 《老罗的Android之旅》导读PPT
虽然好几个月没更新博客了,但是老罗一直有在准备可以分享的东西的.除了早前在微博分享Android4.2相关技术之外,这次还特意准备了13个PPT,总结之前所研究过的东西.内容从Android组件设计思 ...
- 逆向学习(二) 安卓逆向
安卓逆向 0.准备工作和大纲 JAVA环境.apktool.android APK.JADX.keytool.jarsigner(最后两个为JAVASDK自带工具) java基本知识:源代码文件为XX ...
最新文章
- 用 TS + Vue 写了一个在 Chrome 中运行 Prettier 格式化的扩展程序
- Linux内核中影响tcp三次握手的一些协议配置
- 【笔记】docker核心概念和使用 docker命令
- suse系统关闭防火墙
- JavaScript的数组常用方法
- 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains解决
- 释放mysql ibdata1文件_释放MySQL ibdata1文件的空间
- arduino智能浇花系统_arduino+水泵+继电器+RFID
- LinuX编译显示内核配置无效,配置编译内核(Linux kernel)
- Java json拼接字符串_Java中拼接json格式字符串
- Redis学习总结(12)——Redis常见面试题再总结
- 二叉树的非递归遍历(转载)
- 好汇阁外汇MT4-API多账户跟单交易管理系统介绍
- 手把手教你通过PS给所需证件照进行换底色处理
- day7 作业实现:四层字典嵌套循环
- Android 界面一键变灰/黑白
- 未能找到路径中的某个部分_C# 未能找到 的一部分
- Microsoft Visual Studio 2013 产品密匙
- go语言学习:语言简介
- NAS自动挂载和关闭硬盘电源原理
热门文章
- redis订阅怎么退出_Coroutine\Redis 订阅模式 调用退订无效果
- 如何读取图片上的文字?简单的方法分析给你
- 网上国网 2.3.0 encryptData 用电app逆向研究
- linux下怎么批量命名文件,Linux批量重命名文件
- 《视搭》一个完整的视频可视化搭建项目
- 小程序,开发者微信登录可以发消息,换个微信号就发不了消息,请大神指点
- 建一座安全的“天空城” ——揭秘腾讯WeTest如何与祖龙共同挖掘手游安全漏洞
- 国内当前游戏公司一览
- Pandas数据归一化
- 【记录】算法 - JavaScript版