簡體   English   中英

每次使用rdmsrl(system_call,MSR_LSTAR)時,system_call值都不同

[英]system_call value is different each time when I use rdmsrl(MSR_LSTAR, system_call)

我正在寫一個lkm來獲取sys_call_table地址,而我正在嘗試通過IDT來獲取(我已經測試了其他方法並且它們可以工作)。 問題是,當我使用rdmsrl獲取寄存器MSR_LSTAR ,每次都不同。

我已經在Ubuntu 18.04.1中使用內核4.15.0-51嘗試過函數rdmsrlMSR_LSTAR )和asm語句。

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

您是否已啟用CONFIG_RETPOLINE=y (通過cat /usr/src/`uname -r`/.config | grep RETPOLINE )。 如果是這樣的話,對於啟用了內核頁表隔離的CPU, MSR_LSTAR保存每個蹦床的蹦床條目SYSCALL64_entry_trampoline而不是內核版本的標准entry_SYSCALL_64

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM