改用汇编解决Visual Studio中__readmsr等固有函数稳定性问题
Visual Studio中使用__rdtsc/__readmsr/__writemsr固有函数导致系统稳定性问题
问题详情
使用__rdtsc、__readmsr、__writemsr等固有函数执行64位操作(如读取MSR或时间戳计数器)时,系统出现稳定性故障,包括鼠标无响应等异常情况。
已尝试的解决方案
- 检查MSR操作的权限级别与执行上下文
- 确保开发环境安装了最新更新
- 查找这些固有函数的已知问题或编译器潜在漏洞
可行解决方案
改用手动编写汇编代码实现等效功能,通过rdmsr指令配合shl和or操作处理64位结果,彻底解决了稳定性问题。
代码片段:
rdmsr ; Read MSR into EDX:EAX shl rdx, 32 ; Shift the high 32 bits left or rax, rdx ; Combine the high and low parts
疑问
- 是否有其他人在Visual Studio或其他环境中遇到类似问题?
- 这些固有函数是否存在我忽略的已知限制或注意事项?
- 该解决方案是否暗示系统配置或编译器存在更深层问题?
环境信息
- 编译器:Visual Studio 2019
- 操作系统:Windows 10 20H2版本(内部版本19042.804)
- 硬件:AMD K10处理器
最小复现示例
unsigned __int64 AmdP0Freq() { unsigned __int64 msr = __readmsr(0xc0010064); // MSR address for P0 frequency int r = msr & 0x1f; __int64 hz = ((r + 0x10) * 100000000ll) / (1 << ((msr >> 6) & 0x07)); return hz; }
内容的提问来源于stack exchange,提问作者daniel
相关产品推荐
相关产品推荐

