【Android 逆向】Android 进程注入工具开发 ( 调试进程中寄存器的作用 | 通过 EIP 寄存器控制程序运行 | EIP 寄存器的存档与恢复 )

文章目录

一、调试进程中寄存器的作用

二、通过 EIP 寄存器控制程序运行

三、EIP 寄存器的存档与恢复





一、调试进程中寄存器的作用


内存是一个线性结构 , 将动态库加载到内存中后 , 每个动态库文件都是一块连续的内存空间 , 因此可以通过内存地址精准的调用到指定的函数 , 这是远程调用的基础 ;


ptrace 函数操作远程进程 , 调试进程 先 attach 目标进程 , 然后修改 目标进程 寄存器 值 , 最后 detach 目标进程 ;


上述整个过程中 , 调试进程 只能控制 目标进程 的 寄存器值 , 其它的操作是无法进行控制的 ; 调试进程 对 目标进程 的所有操作 , 都与寄存器相关 ;


x86 与 arm 架构中 , 寄存器是不同的 , 因此 x86 与 arm 的 进程调试工具 , 实现也是不同的 ;


本系列博客 , 都是以 x86 架构为准 , 逆向使用 雷电模拟器 3.75 版本 , 其 CPU 架构是 x86 架构的 , 因此整个调试系统以 x86 架构为准 ;






二、通过 EIP 寄存器控制程序运行


通过寄存器控制程序运行 :


x86 架构的 CPU 中 , 16 位 有 IP 寄存器 , 32 位 有 EIP 寄存器 , 现在主流的架构是 32 位 , 64 位兼容 32 位 ;


EIP 寄存器中存储的值是下一条将要执行的指令 ;


目标进程的内存地址范围是 A ~ B , EIP 寄存器的值可以是 A ~ B 之间的任何地址 ;


一旦设置了 EIP 寄存器的值 X , 那么下一条指令 , 就将从 X 地址位置开始执行 ;






三、EIP 寄存器的存档与恢复


EIP 寄存器值的存档与恢复 :


存档 : 在 attach 目标进程后 , 开始进行调试之前 , 先要将 EIP 寄存器的值保存起来 , 存档 ;


恢复 : 在 detach 目标进程前 , 要先恢复 EIP 寄存器的值 , 然后让其还原到调试之前的环境 , 继续向后执行 ;


上一篇:Zabbix 3 中使用 Percona Monitoring Plugins 监控 MySQL


下一篇:修改 Windows Host 文件工具