ptrace (PTRACE_SYSCALL) в ARM не работает должным образом - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь отследить системный вызов в ARM (Android armeabi-v7a), используя функцию ptrace (без использования ptrace в оболочке, я имею в виду использование ptrace в коде). А ниже приведен код, который я написал.

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 (номер системного вызова) для выполнения системного вызова. Однако результаты приведенного выше кода немного отличались. Было правильно, что регистр R0 - R6 имеет аргументы системного вызова, но регистр R7 имел только 0 и 1 несколько раз. Проблема в том, что я не знаю, какой регистр имеет номер системного вызова. Как видно из приведенных выше результатов выполнения кода, ни один регистр не имеет значения, похожего на номер системного вызова. Даже регистры SP имеют значения, которые вообще не похожи на указатели стека. (Предположительно, значение регистра R7, по-видимому, означает вход и выход из системного вызова)

Не могли бы вы объяснить, что я делаю не так?

...