ARM中的ptrace(PTRACE_SYSCALL)无法正常工作

时间:2018-09-06 12:08:33

标签: arm system-calls ptrace eabi

我正在尝试使用ptrace函数(不在shell中使用ptrace,我的意思是在代码中使用ptrace)在ARM(Android armeabi-v7a)中跟踪系统调用。下面是我写的代码。

int trace(int pid)
{
    struct pt_regs regs;
    ptrace(PTRACE_SYSCALL, pid, 0, 0);

    while(1)
    {
        // wait debugee process to stop
        waitpid(pid, &status, 0);
        ptrace(PTRACE_GETREGS, pid, 0, &regs);

        // debugee process has stopped
        if(WSTOPSIG(status) == SIGTRAP)
        {
            // check all register
            fprintf(stderr, "ORIG_R0(%11ld), R0(%11ld), R1(%11ld), R2(%11ld), R3(%11ld), R4(%11ld), R5(%11ld), R6(%11ld), R7(%11ld), R8(%11ld), R9(%11ld), R10(%11ld), SP(%11ld), FP(%11ld), IP(%11ld), LR(%11ld), PC(%11ld), CPSR(%11ld)\n", regs.ARM_ORIG_r0, regs.ARM_r0, regs.ARM_r1, regs.ARM_r2, regs.ARM_r3, regs.ARM_r4, regs.ARM_r5, regs.ARM_r6, regs.ARM_r7, regs.ARM_r8, regs.ARM_r9, regs.ARM_r10, regs.ARM_sp, regs.ARM_fp, regs.ARM_ip, regs.ARM_lr, regs.ARM_pc, regs.ARM_cpsr);
        }

        // continue debugee process
        ptrace(PTRACE_SYSCALL, pid, 0, 0);
    }
}

下面是执行的结果。

ORIG_R0(          6), R0(          6), R1( -286709396), R2(          1), R3( -286704568), R4( -286704588), R5(    4774880), R6( 1348301426), R7(          0), R8(         64), R9( 1348301426), R10(        -48), SP(    5353472), FP(       -128), IP(         12), LR(    5390336), PC(    4773736), CPSR(          0)
ORIG_R0(          6), R0(          1), R1( -286709396), R2(          1), R3( -286704568), R4( -286704588), R5(    4774880), R6( 1348301426), R7(          1), R8(         64), R9( 1348301426), R10(        -48), SP(    5353472), FP(       -128), IP(         12), LR(    5390336), PC(    4773736), CPSR(          0)
ORIG_R0(          1), R0(          1), R1( -286709396), R2(          1), R3( -286704568), R4( -286704588), R5(    4774880), R6( 1348301426), R7(          0), R8(        139), R9( 1348301426), R10(        -48), SP(    5353472), FP(       -128), IP(         12), LR(    5390336), PC(    4784360), CPSR(          0)
ORIG_R0(          1), R0(          0), R1(          1), R2(         17), R3( -286704568), R4( -286704588), R5(    4774880), R6( 1348301426), R7(          1), R8(        209), R9( 1348301426), R10(        -48), SP(    5353472), FP(       -128), IP(         12), LR(    5390336), PC(    4773760), CPSR(          0)
ORIG_R0( -286704576), R0( -286704576), R1(          1), R2( -286704704), R3(          0), R4(          0), R5(        128), R6(          2), R7(          0), R8(         73), R9(          2), R10(          0), SP(    5353472), FP(          0), IP(         12), LR(    5390336), PC(    4774312), CPSR(          0)
ORIG_R0( -286704576), R0(          1), R1(          1), R2( -286704704), R3(          0), R4(          0), R5(        128), R6(          2), R7(          1), R8(         73), R9(          2), R10(          0), SP(    5353472), FP(          0), IP(         12), LR(    5390336), PC(    4774312), CPSR(          0)
ORIG_R0(          8), R0(          8), R1( -286704344), R2(        128), R3(         64), R4(          0), R5(          0), R6(          2), R7(          0), R8(        207), R9(          2), R10(          0), SP(    5353472), FP(          0), IP(         12), LR(    5390336), PC(    4774504), CPSR(  536870912)
ORIG_R0(          8), R0(        128), R1( -286704344), R2(        128), R3(         64), R4(          0), R5(          0), R6(          2), R7(          1), R8(        207), R9(          2), R10(          0), SP(    5353472), FP(          0), IP(         12), LR(    5390336), PC(    4774504), CPSR(  536870912)
ORIG_R0(          8), R0(          8), R1(          1), R2(         31), R3( 2036548096), R4( -286704692), R5(         64), R6(         63), R7(          0), R8(        209), R9(          4), R10(          2), SP(          1), FP(          1), IP( 2036351360), LR( 2036351360), PC(    4773760), CPSR( 1073741824)
ORIG_R0(          8), R0(          0), R1(          1), R2(         31), R3( 2036548096), R4( -286704692), R5(         64), R6(         63), R7(          1), R8(        209), R9(          4), R10(          2), SP(          1), FP(          1), IP( 2036351360), LR( 2036351360), PC(    4773760), CPSR( 1073741824)
ORIG_R0(       -100), R0(       -100), R1( 2035645536), R2(          0), R3(          0), R4( 2036362616), R5( 1348301426), R6(   75039744), R7(          0), R8(         56), R9(        246), R10( 2037383168), SP(   75690976), FP(    5353472), IP(    5396536), LR(   75039616), PC(    4775008), CPSR( 1610612736)
ORIG_R0(       -100), R0(         14), R1( 2035645536), R2(          0), R3(          0), R4( 2036362616), R5( 1348301426), R6(   75039744), R7(          1), R8(         56), R9(        246), R10( 2037383168), SP(   75690976), FP(    5353472), IP(    5396536), LR(   75039616), PC(    4775008), CPSR( 1610612736)
ORIG_R0(         14), R0(         14), R1( 2036469760), R2(       4095), R3(          4), R4(          0), R5(         64), R6(         63), R7(          0), R8(         63), R9(          4), R10(    5390336), SP(      14839), FP(          0), IP(      14838), LR(    5390336), PC(    4774360), CPSR( 1073741824)
ORIG_R0(         14), R0(         12), R1( 2036469760), R2(       4095), R3(          4), R4(          0), R5(         64), R6(         63), R7(          1), R8(         63), R9(          4), R10(    5390336), SP(      14839), FP(          0), IP(      14838), LR(    5390336), PC(    4774360), CPSR( 1073741824)
ORIG_R0(         14), R0(         14), R1( 2037383168), R2(    5353472), R3(         20), R4(          0), R5(          0), R6( 2036380216), R7(          0), R8(         57), R9(        251), R10(         93), SP(    5396544), FP( 2036335336), IP(    5353472), LR(      32768), PC(    4774672), CPSR(-2147483648)
ORIG_R0(         14), R0(          0), R1( 2037383168), R2(    5353472), R3(         20), R4(          0), R5(          0), R6( 2036380216), R7(          1), R8(         57), R9(        251), R10(         93), SP(    5396544), FP( 2036335336), IP(    5353472), LR(      32768), PC(    4774672), CPSR(-2147483648)
ORIG_R0( -286706232), R0( -286706232), R1(          1), R2( -286706320), R3(          0), R4(          0), R5(          0), R6(          0), R7(          0), R8(         73), R9(          0), R10(          0), SP(          5), FP(          0), IP(          0), LR( 2036351040), PC(    4774312), CPSR( 1610612736)
ORIG_R0( -286706232), R0(          0), R1(          1), R2( -286706320), R3(          0), R4(          0), R5(          0), R6(          0), R7(          1), R8(         73), R9(          0), R10(          0), SP(          5), FP(          0), IP(          0), LR( 2036351040), PC(    4774312), CPSR( 1610612736)
ORIG_R0( 2039265648), R0( 2039265648), R1(          1), R2( 2147483647), R3(          0), R4(  117440573), R5(         62), R6(         62), R7(          0), R8(         98), R9( 2139062143), R10( 2139062143), SP(         -1), FP(   16843009), IP(         32), LR(          0), PC(    4712472), CPSR(-2147483648)
ORIG_R0( 2039265648), R0(          0), R1(          1), R2( 2147483647), R3(          0), R4(  117440573), R5(         62), R6(         62), R7(          1), R8(         98), R9( 2139062143), R10( 2139062143), SP(         -1), FP(   16843009), IP(         32), LR(          0), PC(    4712472), CPSR(-2147483648)
ORIG_R0( 2039209988), R0( 2039209988), R1(          1), R2( 2147483647), R3(          0), R4(         62), R5(         62), R6(         62), R7(          0), R8(         98), R9(      14802), R10( 2139062143), SP(         -1), FP(   16843009), IP(         32), LR(          0), PC(    4712472), CPSR(          0)
ORIG_R0( 2039209988), R0(          0), R1(          1), R2( 2147483647), R3(          0), R4(         62), R5(         62), R6(         62), R7(          1), R8(         98), R9(      14802), R10( 2139062143), SP(         -1), FP(   16843009), IP(         32), LR(          0), PC(    4712472), CPSR(          0)
ORIG_R0(          8), R0(          8), R1(    4957456), R2(          9), R3(        186), R4(-1187365760), R5(          0), R6(   84543233), R7(          0), R8(         57), R9( 2139062143), R10( 2139062143), SP(          0), FP(   16843009), IP(          7), LR(       -256), PC(    4774672), CPSR( 1610612736)
ORIG_R0(          8), R0(          0), R1(    4957456), R2(          9), R3(        186), R4(-1187365760), R5(          0), R6(   84543233), R7(          1), R8(         57), R9( 2139062143), R10( 2139062143), SP(          0), FP(   16843009), IP(          7), LR(       -256), PC(    4774672), CPSR( 1610612736)
ORIG_R0( -286704080), R0( -286704080), R1(          2), R2(          0), R3(          0), R4(          0), R5(         -1), R6( 1348301426), R7(          0), R8(         73), R9( 1348301426), R10(        -48), SP(    5353472), FP(       -128), IP(         12), LR(    5390336), PC(    4774312), CPSR( 1610612736)
ORIG_R0( -286704080), R0(          2), R1(          2), R2(          0), R3(          0), R4(          0), R5(         -1), R6( 1348301426), R7(          1), R8(         73), R9( 1348301426), R10(        -48), SP(    5353472), FP(       -128), IP(         12), LR(    5390336), PC(    4774312), CPSR( 1610612736)
ORIG_R0(          5), R0(          5), R1( -286704456), R2( -286704592), R3(          0), R4(    5357568), R5(    4774880), R6( 1348301426), R7(          0), R8(        242), R9( 1348301426), R10(        -48), SP(    5353472), FP(       -128), IP(         12), LR(    5390336), PC(    4774888), CPSR( 1610612736)
ORIG_R0(          5), R0(          8), R1( -286704456), R2( -286704592), R3(          0), R4(    5357568), R5(    4774880), R6( 1348301426), R7(          1), R8(        242), R9( 1348301426), R10(        -48), SP(    5353472), FP(       -128), IP(         12), LR(    5390336), PC(    4774888), CPSR( 1610612736)
ORIG_R0(          8), R0(          8), R1(          1), R2(         17), R3( -286704568), R4( -286704588), R5(    4774880), R6( 1348301426), R7(          0), R8(        209), R9( 1348301426), R10(        -48), SP(    5353472), FP(       -128), IP(         12), LR(    5390336), PC(    4773760), CPSR(          0)
ORIG_R0(          8), R0(          0), R1(          1), R2(         17), R3( -286704568), R4( -286704588), R5(    4774880), R6( 1348301426), R7(          1), R8(        209), R9( 1348301426), R10(        -48), SP(    5353472), FP(       -128), IP(         12), LR(    5390336), PC(    4773760), CPSR(          0)

我了解到,ARM EABI将寄存器R0设置为R6(自变量)和R7(系统调用号)以执行系统调用。但是,以上代码的结果略有不同。寄存器R0R6具有系统调用参数是正确的,但是寄存器R7仅重复具有0和1。问题是我不知道哪个寄存器具有系统调用号。从上面的代码执行结果可以看出,没有寄存器具有看起来像系统调用号的值。甚至寄存器SP的值根本看起来都不像堆栈指针。 (大概,寄存器R7的值似乎意味着系统调用进入和退出)

你能解释我在做什么错吗?

0 个答案:

没有答案