如何使用ptrace获得arm CPU的寄存器信息
在/usr/include/asm/ptrace.h 中看到以下代码struct pt_regs {
long uregs;
};
#define ARM_cpsr uregs
#define ARM_pc uregs
#define ARM_lr uregs
#define ARM_sp uregs
#define ARM_ip uregs
#define ARM_fp uregs
#define ARM_r10 uregs
#define ARM_r9 uregs
#define ARM_r8 uregs
#define ARM_r7 uregs
#define ARM_r6 uregs
#define ARM_r5 uregs
#define ARM_r4 uregs
#define ARM_r3 uregs
#define ARM_r2 uregs
#define ARM_r1 uregs
#define ARM_r0 uregs
然后我希望使用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);
exit(1);
}
traced_process = atoi(argv);
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]