waiting000 发表于 2011-12-31 16:58

如何使用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, &regs);
        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

如何达到我想要的目的。谢谢指教

cjaizss 发表于 2012-01-07 01:14

似乎没看出来有什么大问题,哪天我去试验一下看看.
页: [1]
查看完整版本: 如何使用ptrace获得arm CPU的寄存器信息