改造 Cydia Substrate 框架用于函数内代码的HOOK

上一次分析了Cydia Substrate so hook 框架的实现,实际使用中,发现这样的框架并不能满足我的一些需求,比如我要知道一个函数内部某处代码的运行时的寄存器值,用原始的框架就无法做到。

   想实现的功能是只要指定一个地址,就可以打印该处代码执行时的寄存器环境、HOOK的地址以及线程的TID,同时支持多个地址的添加。

    先实现一个通用的消息打印函数

void printAllReg(int Reg_R0,int Reg_R1,int Reg_R2,int Reg_R3,int Stack_SP,int Stack_SP2)
{
    int *pSP2 = &Stack_SP2;
    int Reg_R12 = *(pSP2+1);
    int Reg_R11 = *(pSP2+2);
    int Reg_R10 = *(pSP2+3);
    int Reg_R9 = *(pSP2+4);
    int Reg_R8 = *(pSP2+5);
    int Reg_R7 = *(pSP2+13);
    int Reg_R6 = *(pSP2+12);
    int Reg_R5 = *(pSP2+11);
    int Reg_R4 = *(pSP2+10);
     char *pFormat="Hookaddr:0x%08x tid=%x R0:0x%08x R1:0x%08x R2:0x%08x R3:0x%08x \nR4:0x%08xR5:0x%08x R6:0x%08x R7:0x%08x R8:0x%08x R9:0x%08x R10:0x%08x R11:0x%08xR12:0x%08x ";
 LOGD(pFormat,(Stack_SP2-1-(int)pSSELibBase),gettid(),Reg_R0,Reg_R1,Reg_R2,Reg_R3,Reg_R4,Reg_R5,Reg_R6,Reg_R7,Reg_R8,Reg_R9,Reg_R10,Reg_R11,Reg_R12);
}


里面具体的参数意义后面再讲。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值