文章目录
- 一、调试进程中寄存器的作用
- 二、通过 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 寄存器的值 , 然后让其还原到调试之前的环境 , 继续向后执行 ;