首页
社区
课程
招聘
[求助]单步调试陷阱无效
发表于: 2018-11-6 09:50 2645

[求助]单步调试陷阱无效

2018-11-6 09:50
2645
代码来自     https://bbs.pediy.com/thread-223460.htm   @“爱吃蔬菜”
char dynamic_ccode[] = {0x1f,0xb4, //push {r0-r4}
                        0x01,0xde, //breakpoint
                        0x1f,0xbc, //pop {r0-r4}
                        0xf7,0x46};//mov pc,lr
char *g_addr = 0;
void my_sigtrap(int sig){
    char change_bkp[] = {0x00,0x46}; //mov r0,r0
    memcpy(g_addr+2,change_bkp,2);
    __clear_cache((void*)g_addr,(void*)(g_addr+8)); // need to clea
r cache
    LOGI("chang bpk to nop\n");
}
void anti4(){//SIGTRAP
    int ret,size;
    char *addr,*tmpaddr;
    signal(SIGTRAP,my_sigtrap);
    addr = (char*)malloc(PAGESIZE*2);
    memset(addr,0,PAGESIZE*2);
    g_addr = (char *)(((int) addr + PAGESIZE-1) & ~(PAGESIZE-1));
    LOGI("addr: %p ,g_addr : %p\n",addr,g_addr);
    ret = mprotect(g_addr,PAGESIZE,PROT_READ|PROT_WRITE|PROT_EXEC);
    if(ret!=0)
    {
        LOGI("mprotect error\n");
return ; }
    size = 8;
    memcpy(g_addr,dynamic_ccode,size);
    __clear_cache((void*)g_addr,(void*)(g_addr+size)); // need to clear cache
    __asm__("push {r0-r4,lr}\n\t"
            "mov r0,pc\n\t" //此时pc指向后两条指令
            "add r0,r0,#4\n\t"//+4 是的lr 地址为 pop{r0-r5} 
             "mov lr,r0\n\t"
            "mov pc,%0\n\t"
            "pop {r0-r5}\n\t"
            "mov lr,r5\n\t" //恢复lr
            :
            :"r"(g_addr)
            :);
    LOGI("hi, i'm here\n");
    free(addr);
}


运行到汇编这部分代码会卡死掉,这个是PDF里复制来的,请教下是要怎么修改下才能生效吗
 
环境   :Android6.0  真机


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//