MSR寄存器访问

MSR是CPU中的64位寄存器,可以通过RDMSR和WRMSR指令进行读写。读取时,MSR地址放入ECX,执行rdmsr指令,数据分别存储在EDX和EAX。写入时,同样将地址放入ECX,数据分别放入EDX和EAX,然后执行wrmsr指令。文章举例说明了读取IA32_SYSENTER_EIP和写入KERNEL_SERVICE_ENTRY的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.介绍

MSR是CPU的一组64位寄存器,每个MSR都有它的地址值(如下图所示),可以分别通过RDMSR 和WRMSR 两条指令进行读和写的操作。
在这里插入图片描述
如图中为8个P-state寄存器,地址分别为0xC001 0064 ~ 0xC001 006B,每个寄存器64bit。

2.读取MSR

MSR的读取,使用rdmsr指令:

  • 先向ECX寄存器,写入欲访问MSR地址;
  • 再执行rdmsr指令;
  • 寄存器数据(64位)被读取到EDX和EAX寄存器。

高32位放在EDX寄存器,低32位放在EAX寄存器。

mov ecx,176H   // IA32_SYSENTER_EIP 寄存器的地址
rdmsr           // 读MSR内容到 EDX:EAX 寄存器

3.写入MSR

MSR的写入,使用wrmsr指令:

  • 先向ECX寄存器,写入欲访问MSR地址;
  • 再向EDX和EAX寄存器,写入数据(64位);
  • 最后执行wrmsr指令。

高32位放在EDX寄存器,低32位放在EAX寄存器。

mov rcx,176H
mov rdx,KERNEL_SERVICE_ENTRY
mov rax,rdx
shr rdx,32        ;拆分到EDX:EAX 放入 64 位的值
wrmsr
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百里杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值