首页
社区
课程
招聘
[求助]MuMu模拟器下Ptrace获取寄存器参数无效
发表于: 2024-11-5 14:39 1222

[求助]MuMu模拟器下Ptrace获取寄存器参数无效

2024-11-5 14:39
1222

翻阅资料跟问了AI,写了个demo,但是errno报22,参数无效!


雷电模拟器论坛上发现有个老哥跟我一样的问题在今年4月份的但是也没有解决

我用雷电模拟器倒是获取到了x86的寄存器,很可惜是个32位的

于是我选择我电脑另一台模拟器 MUuMu模拟器(aarch64)

ATTATCH,PEEDKDATA这些没问题,然后我就测试获取寄存器

查阅资料发现PTRACE_GETREGS参数要改成PTRACE_GETREGSET, 结果能跑起来了,但是获取不到,errno就是报22,所以来问问大手子们有没有解决的方案


# 写的小demo贴上,求大牛们指正

//获取寄存器

static void trace_getregs(pid_t pid, struct pt_regs * regs) {

#if defined (__aarch64__) || defined(__x86_64__)

    uintptr_t regset = NT_PRSTATUS;

    struct iovec ioVec;

    ioVec.iov_base = regs;

    ioVec.iov_len = sizeof(*regs);

    if(ptrace(PTRACE_GETREGSET, pid,(void*)regset, (size_t)&ioVec )<0){

    printf("\n errno %d\n",errno);

    }

#else

    ptrace(PTRACE_GETREGS,pid ,0, (size_pt)regs );

#endif

}

 

void quit(pid_t pid) {

    puts("quit");

    ptrace(PTRACE_DETACH, pid, NULL, NULL);

    exit(0);

}


int main(int argc, char* argv[]) {

    pid_t pid = 2451;

    // void* address = 0x706A257BA198;

    if (ptrace(PTRACE_ATTACH, pid, NULL, NULL)) {

        printf("%d",errno);

        perror("ptrace_attach failed");

        return -1;

    }

    waitpid(pid, NULL, 0);

    printf("Attached to process %d\n", pid);

    struct pt_regs regs;

    trace_getregs(pid,&regs);

    printf("\n %p \n",regs.pc);

    

    quit(pid);

    return 1;

}



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 65
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
家人们问题似乎是找到答案了,电脑模拟器只有获取x86或者x86-x64寄存器才有用,我一开始用uname获取到的是aarch64,后面换了个别的终端发现是x86-x64,然后我就测试了一下模拟器获取x86寄存器,成功了。
然后我用手机跑上面这段代码,获取arm寄存器成功了(手机上的虚拟机也成功了),代码没问题,问题出在架构上
2024-11-5 17:50
0
游客
登录 | 注册 方可回帖
返回
//