Я пишу lkm, чтобы получить sys_call_table
адрес, и я пытаюсь получить его по IDT (я проверил другие методы, и они работают). Проблема в том, что когда я использую rdmsrl
, чтобы получить регистр MSR_LSTAR
, он каждый раз меняется.
Я пробовал использовать функции rdmsrl
(MSR_LSTAR
) и asm в Ubuntu 18.04.1 с ядром 4.15.0-51.
asm("rdmsr" : "=a" (low), "=d" (high) : "c" (IA32_LSTAR));
system_call = (void*)(((long)high<<32) | low);
printk(KERN_INFO "system_call: 0x%llx", system_call);
rdmsrl(MSR_LSTAR, sct_off);
printk("sct_off: %016llx\n", sct_off);
Результат выглядит следующим образом:
system_call: 0xfffffe0000006000
system_call: 0xfffffe000008a000
system_call: 0xfffffe0000032000