翻阅资料跟问了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,®s);
printf("\n %p \n",regs.pc);
quit(pid);
return 1;
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)