Как найти и переписать, где установлен обработчик syscall в cortex-a8 - PullRequest
0 голосов
/ 03 февраля 2019

Я пытаюсь создать драйвер для goldfish - ядро ​​linux (эмулятор Android), который перехватывает системные вызовы и считает их.Как я могу определить адрес обработчика syscall?

код ниже перехватывает системный вызов и записывает трассировки для Windows, мне нужно сделать то же самое с ядром linux на cortex-a8

#define IA32_SYSENTER_EIP 0x176
VOID __declspec(naked) NewKiFastCallEntry()
{
    __asm
    {
        pushad
        pushfd
        mov ecx, 0x23
        push 0x30
        pop fs
        mov ds, cx
        mov es, cx
        push eax
        call LogSystemCall
        popfd
        popad
        jmp [OriginalKiFastCallEntry]
    }
}

VOID HookSysenter()
{
    DbgPrint("-Sysenter- Hooking sysenter...\n");

    __asm
    {
        mov ecx, IA32_SYSENTER_EIP
        xor edx, edx
        rdmsr
        mov OriginalKiFastCallEntry, eax
        mov eax, NewKiFastCallEntry
        wrmsr
    }

    DbgPrint("-Sysenter- Original KiFastCallEntry address is 0x%08X\n", OriginalKiFastCallEntry);
    DbgPrint("-Sysenter- New KiFastCallEntry address is 0x%08X\n", NewKiFastCallEntry);
    DbgPrint("-Sysenter- Finished hooking sysenter\n");
}
...