从管理员权限应用程序读取 cpu 控制寄存器的值 (Windows)

2024-02-13

我正在尝试使用内联汇编从 cpu 控制寄存器读取数据。我最初的目标是 x86-64。我对 c 或汇编不太熟悉,但我设法进行了一个非常简单的尝试,如下所示:

#include <stdio.h>
#include <stdint.h>

int main() {
    uint64_t result;
    asm ("movq %%cr4, %0;"
         : "=r" (result) ::
    );

    printf("result: %d \n", result);

    return 0;
}

这可以编译,但会在 gdb 中引发运行时错误:

Thread 1 received signal SIGILL, Illegal instruction.
main () at main.c:6
6           asm ("movq %%cr4, %0;"

我认为 c/汇编是正确的,因为我能够从其他寄存器中提取值。我认为该错误是由于我没有在内核模式下运行(根据我所读到的内容),但我不完全理解这意味着什么,并且由于我对 c/汇编的理解有限,我不知道当然我应该现在就使用内核模式。

在内核模式之外还有其他方法可以做到这一点吗?例如,此信息是否可以通过某处公开的 dll 调用获得。

我欢迎任何关于在内核模式下运行应用程序的影响的评论。


Update:这个答案不适合 CR 寄存器,根据这条评论 https://stackoverflow.com/questions/46459328/read-the-value-of-a-cpu-control-register-from-admin-privilege-app-windows/46461572?noredirect=1#comment91333791_46461572.


您正在寻找的是所谓的“WinRing0.sys”驱动程序,它公开了一个 API,允许您从用户模式读取仅可用于内核(环 0)代码的所有各种有趣的 MSR。

这是一个开源组件,但最重要的是,有人已经付费签署了驱动程序,以便可以将其加载到 Windows 中(作为个人,即使您愿意付费,实际上也不可能签署当前的 Windows 驱动程序) 。您可以找到 32 位和 64 位 (WinRing0x64.sys) 二进制文件here https://github.com/openhardwaremonitor/openhardwaremonitor/tree/master/Hardware.

更多详细信息请参阅这个答案 https://stackoverflow.com/a/45494255/149138- 问题在于对性能计数器进行编程,但所需的访问权限是相同的,并且 WinRing0.sys 将适用于这两种用例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从管理员权限应用程序读取 cpu 控制寄存器的值 (Windows) 的相关文章

随机推荐

  • 标头保护/翻译单元问题

    我的印象是标头保护解决了重新定义的问题 我收到链接器错误 表明 obj 文件中存在重新定义 这是我要包含的标头 问题在于所有全局声明的重新定义 ifndef DIRECT3D H define DIRECT3D H global decla
  • 如何将 WPF 项添加到 VS2019 中的 C# 类库项目中?

    我已在 Visual Studio 2019 中启动了一个类库项目 现在希望向其中添加 WPF 项 窗口 用户控件 自定义控件 但 添加项 对话框在 WPF 部分下未列出任何内容 我在以前版本的 VS 中遇到过这个问题 并通过添加
  • 为什么 MATLAB 使用列优先顺序? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我知道C语言使用行优先顺序来存储数组 而MATLAB使用列优先顺序 MATLAB 选择列优先顺序有什么具体原因吗 通过选择在内存中按列排列
  • 如何访问 cl-json 从 JSON 解码的对象?

    我正在尝试在 Common Lisp 中导入 JSON 我想出了如何从 JSON 字符串解码对象 但我不知道如何访问返回的对象的属性 要解码字符串 并将结果存储在 tempjson 中 我这样做 defun test json with i
  • Mysql 未与 JNDI Tomcat 6 重新连接

    我使用 JNDI 和 Tomcat6 来管理 Mysql 连接 我的 Catalina domain com ROOT xml 有
  • 内核:如何从进程的task_struct中找到所有线程?

    给定一个进程或线程的任务结构 迭代属于同一进程的所有其他线程的习惯用法是什么 Linux 不区分进程 任务 和线程 库调用 fork 和 pthread create 使用相同的系统调用 clone fork 和 pthread creat
  • JSR 305 的状态如何?

    我已经看到问题了JSR305 与 JSR308 Java 类型注释 哪个将成为标准 https stackoverflow com questions 1476757 jsr305 vs jsr308 java type anotation
  • 如何在 OpenCart 的任何页面上显示小计?

    目前我知道的唯一全局 PHP 命令是
  • 如何将滑动选项卡视图放入导航抽屉选项之一

    更新的代码 Override public View onCreateView LayoutInflater inflater ViewGroup container Bundle savedInstanceState View rootV
  • 链接元素加载

    无论如何 有没有办法监听 onload 事件元素 F ex var link document createElement link link rel stylesheet link href styles css link onload
  • 如何使用 python 打开 adb shell 并在 shell 内执行命令

    我正在尝试使用 subprocess Popen 在 python 中执行 adb shell 命令 示例 需要在 adb shell 中执行 命令 手动执行时 我打开命令窗口并按如下所示执行 它可以工作 gt adb shell
  • 如果芹菜工人死了,工作会重试吗?

    如果运行工作程序的服务器挂掉 是否有办法重试 celery 作业 我指的不仅仅是执行作业的子进程 而是整个服务器变得不可用 我尝试使用 RabbitMQ 和 Redis 作为代理 在这两种情况下 如果当前正在处理作业 则它会被完全遗忘 当工
  • 当键盘出现时 ActionBar 隐藏

    我正在使用 ActionBarSherlock windowSoftInputMode is adjustPan 我尝试过adjustResize and adjustNothing also 我想保留ActionBar当键盘出现时屏幕上b
  • 从 Laravel 查询生成器生成原始 MySQL 查询

    我怎样才能得到mysql查询一个laravel query Convert App User where balance gt 0 gt where gt get To SELECT FROM users WHERE balance gt
  • 从 CoffeeScript 文件调用 JavaScript 函数

    我需要在我的 CoffeeScript 应用程序中使用 JavaScript 库 由于我对两种语言都不熟悉 所以我尝试一些简单的方法 我的咖啡脚本文件 empty require models empty class Contact ext
  • glGenTextures - 纹理的数量有限制吗?

    在 OpenGL 中 即使用 glGenTextures 可以创建的纹理数量是否有限制 我知道 GL 施加了一些限制 例如 片段着色器中可以使用的纹理数量 但是 我无法找到任何有关可用的整数 纹理名称 总数的文档 glGenTextures
  • 基本 Javascript 数学文本字段

    你好 我是新人 正在学习 javascript 我正在尝试通过文本字段制作一个加法程序 检查js fiddle上的html代码http jsfiddle net fCXMt http jsfiddle net fCXMt 我需要知道的是如何
  • 突出显示 PHP 中两个字符串之间的差异

    在 PHP 中突出显示两个字符串之间的差异的最简单方法是什么 我正在沿着 Stack Overflow 编辑历史页面的思路思考 其中新文本为绿色 删除的文本为红色 如果有任何预先编写的函数或类可用 那将是理想的 只是编写了一个类来计算将一个
  • 将 QTableWidget 写入 .csv 或 .xls

    是否可以将 QTableWidget 的内容写入 csv 我发现了一个关于使用 xlwt 写入 xls 的问题 但似乎无法使用我的代码使其工作 def saveFile self filename unicode QtGui QFileDi
  • 从管理员权限应用程序读取 cpu 控制寄存器的值 (Windows)

    我正在尝试使用内联汇编从 cpu 控制寄存器读取数据 我最初的目标是 x86 64 我对 c 或汇编不太熟悉 但我设法进行了一个非常简单的尝试 如下所示 include