前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )

【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )

作者头像
韩曙亮
发布2023-03-29 20:20:42
3930
发布2023-03-29 20:20:42
举报

文章目录

一、代码调试器功能简介


代码调试器功能 :

  • 设置断点 : 无论什么类型的调试器 , 都必须可以设置断点 , 运行到断点处 , 挂起被调试进程 , 读取当前状态的 CPU 寄存器和内存数据 ;
    • arm 架构中 , 有一个单步调试标志位 , 将该标志位设置为 1 , 即可进行单步调试 ;
    • x86 架构中 , 主要是靠 int3 触发 , int3 对应 0xCC 机器码 , 将该机器码写入指令指定位置后 , 就会执行中断 , 调试器捕获该中断处理 , 就可以进入调试 ;
    • 如果没有设置断点 , 想要调试程序 , 只能在系统调用时 , 触发中断 ; 如 : printf , 打印日志 , 文件改变 , 显示内容改变 等 ;
  • 读写内存 : 可以读写 被调试进程 的内存数据 ;
  • 读写寄存器 : 可以读写 被调试进程 的 CPU 寄存器数据 ; 如果有多个线程 , 默认读写主线程寄存器 ;
  • 恢复运行 : 调试完毕后 , 还需要可以恢复运行 ; 调用 ptrace 函数 , 传入 PTRACE_CONT 参数 , 就可以继续进行 ;

上述所有操作 , 都是通过调用 ptrace 方法完成的 , 只是传入不同的参数 , 执行不同的操作 ;

参考 【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 ) 博客 ;

二、Attach 进程


进程 A 调试 进程 B , 首先要 attach 进程 B , attach 操作需要指定 进程 B 的 进程号 PID ;

进程 ID 在当前系统运行时是唯一的 ; 进程 B 每次启动时 , 进程号是随机分配的 , 值并不固定 ;

PID 进程号的取值范围 0 ~ 32767 ; 上限是 65535 一半 ;

一般情况下 1000 以下的进程号 , 是系统进程使用的 ;

以 非 root 权限执行的进程 , 都是 1000 以上的进程号 ;

Attach 进程代码 : PTRACE_ATTACH 参数表示该函数操作是 Attach 被调试进程 , nPid 参数为 进程 PID ;

代码语言:javascript
复制
ptrace(PTRACE_ATTACH, nPid, NULL, 0)

ptrace 函数参考文档 : https://man7.org/linux/man-pages/man2/ptrace.2.html

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、代码调试器功能简介
  • 二、Attach 进程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档