🤖

LSTAR

2022/12/19に公開

LSTAR

システムコールのentry_SYSCALL_64のアドレスを取得するモジュール

#include <linux/module.h>

static inline uint64_t exec_rdmsr(uint64_t msr)
{
	uint32_t low, high;
	asm volatile (
		"rdmsr"
		: "=a"(low), "=d"(high)
		: "c"(msr)
	);
	return ((uint64_t)high << 32) | low;
}

static int __init mymodule_init(void) 
{
	
	uint64_t res = exec_rdmsr(0xc0000082U);
	printk(KERN_INFO "MSR_IA32_LSTAR: %llx\n", res);
	return 0; 
} 

static void __exit mymodule_exit(void) 
{ 
	printk(KERN_INFO "bye module\n"); 
} 

module_init(mymodule_init); 
module_exit(mymodule_exit); 
MODULE_AUTHOR("shiroyama"); 
MODULE_LICENSE("GPL v2"); 

X86_FEATURE_PTIは有効になっておらず、というかそのようなCONFIGも存在せず、毎回LSTARのアドレスは同じになる。
MSR_IA32_LSTAR: ffffffff81e00000
MSR_IA32_LSTAR: ffffffff81e00000

https://aya213.blogspot.com/2009/09/rdmsr-wrmsr-in-c.html

https://smallkirby.hatenablog.com/entry/2020/11/25/080534#MSR_LSTAR

Discussion