如何使用ptrace()获得arm CPU的寄存器信息

waiting000 waiting000 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
在/usr/include/asm/ptrace.h 中看到以下代码

struct pt_regs {
long uregs[18];
};

#define ARM_cpsr uregs[16]
#define ARM_pc uregs[15]
#define ARM_lr uregs[14]
#define ARM_sp uregs[13]
#define ARM_ip uregs[12]
#define ARM_fp uregs[11]
#define ARM_r10 uregs[10]
#define ARM_r9 uregs[9]
#define ARM_r8 uregs[8]
#define ARM_r7 uregs[7]
#define ARM_r6 uregs[6]
#define ARM_r5 uregs[5]
#define ARM_r4 uregs[4]
#define ARM_r3 uregs[3]
#define ARM_r2 uregs[2]
#define ARM_r1 uregs[1]
#define ARM_r0 uregs[0]


然后我希望使用x86上的方式获得CPU寄存器值:

int main(int argc, char *argv[])
{
pid_t traced_process;
struct pt_regs regs;
long ins;

if ( argc != 2 ) {
printf("Usage: %s <pid to be traced>", argv[0]);
exit(1);
}

traced_process = atoi(argv[1]);
ptrace(PTRACE_ATTACH, traced_process, NULL, NULL);
wait(NULL);
ptrace(PTRACE_GETREGS, traced_process, NULL, ®s);
ins = ptrace(PTRACE_PEEKTEXT, traced_process,
regs.ARM_ip, NULL);
printf("EIP: %lx Instructions executed: %lx\n", regs.ARM_ip, ins);
ptrace(PTRACE_DETACH, traced_process, NULL, NULL);

return 0;
}


但是实际执行的时候,输出
EIP: 0 Instructions executed: ffffffff

小弟实在是菜,不知道如何是好了……希望各位指教
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部
waiting000
Linux_Kernel 4,469 成员 17,458 内容