有什么方法可以触发 RDTSC 的传统模式吗?

2024-02-04

我重写了整个问题,人们显然不理解。

RDTSC 用于计算 CPU 周期,它随 CPU 限制而变化。

目前,RDTSC 不随 CPU 限制而变化。

一些旧的应用程序期望 RDTSC 随 CPU 限制而变化。

我如何让 RDTSC 满足他们的期望?

我不想分析代码,我不想重写大量代码,我不想强​​迫用户弄乱 BIOS 或内核权限,我只想让遗留应用程序正常工作。


简而言之,你不能通过轻按一下开关来做到这一点

英特尔开发人员手册 3B, 第17章,明确读取

不变的 TSC 将在所有 ACPI P-、C- 中以恒定速率运行。和 T 状态。这是向前发展的建筑行为。

这是另一种方式告诉你无法切换回之前的行为.


不过,如果你真的喜欢的话,你可以尝试一些东西。

rdtsc其值取自IA32_TIME_STAMP_COUNTER,这是可写的。
所以你可以“伪造”阅读rdtsc无需更改任何程序,但需要驱动程序。
改变IA32_TIME_STAMP_COUNTER调整内部时钟计数可能并不那么容易。

我不记得自重置以来是否有一个性能事件对内部时钟进行计数,如果有,那么理论上您只需读取该值并写入IA32_TIME_STAMP_COUNTER.
较新的CPU也支持IA32_TSC_ADJUST可以用来调整TSC以相对方式:无论您添加/减去什么IA32_TSC_ADJUST添加/减去IA32_TIME_STAMP_COUNTER。所以你可以减慢或加快计数器的速度。

无论哪种方式,你都需要:

  • 创建一个驱动程序以交付给您的用户。可能没有安装它的权限。
  • 要了解 CPU 的确切限制,与 gudok 答案的投票计数相反,性能计数器寄存器是唯一的方法。除非您想挂钩操作系统电源管理器功能/事件并进行有根据的猜测。
  • 将该节流映射到TSC value.
  • 选择更新频率TSC(重要)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有什么方法可以触发 RDTSC 的传统模式吗? 的相关文章

  • 如何让c代码执行hex机器代码?

    我想要一个简单的 C 方法能够在 Linux 64 位机器上运行十六进制字节码 这是我的 C 程序 char code x48 x31 xc0 include
  • 取消的分支与常规分支有何不同?

    特别是对于 SPARC Assembly 取消的分支与常规分支有何不同 我一直认为 当我需要填充分支指令的 nop 延迟槽时 需要取消分支指令 但是 我认为我在这一部分上是不正确的 因为您可以在不取消分支的情况下填充 nop 如果不采用分支
  • CALL指令是否总是将EIP指向的地址压入堆栈?

    x86架构中函数调用时是否存在返回地址不入栈的情况 No CALL根据定义 将在跳转到目标地址之前将返回地址压入堆栈 该返回地址是EIP or RIP sizeof call instruction 通常为 5 个字节 英特尔 64 和 I
  • Visual Studio 2017 上的简单装配程序

    386 model flat c stack 100h printf PROTO arg1 Ptr Byte data msg1 byte Hello World 0Ah 0 code main proc INVOKE printf ADD
  • 减法进位标志

    我正在使用 MASM32 有了这个代码 mov eax 5 sub eax 10 CF 状态标志将被设置 但使用我的铅笔和纸 我实际上看到 MSB 没有任何进位 是的 我知道从较少的数字中减去大的数字集CF 但我想知道为什么 因为使用这段代
  • 在 x86-64 CPU 上通过交叉修改代码重现意外行为

    Question 对于可能在 x86 或 x86 x64 系统上触发意外行为的交叉修改代码有哪些想法 在这些系统中 交叉修改代码中的所有操作均已正确完成 但在执行处理器之前执行序列化指令除外修改代码 如下所述 我有一个 Core 2 Duo
  • 在 x86 ASM 中测试零通常哪个更快:“TEST EAX, EAX”与“TEST AL, AL”?

    测试 AL 中的字节是否为零 非零通常哪个更快 TEST EAX EAX TEST AL AL 假设之前有一个 MOVZX EAX BYTE PTR ESP 4 指令加载了一个带有零扩展的字节参数到 EAX 的其余部分 防止了我已经知道的组
  • 为什么我的空循环在 Intel Skylake CPU 上作为函数调用时运行速度是原来的两倍?

    我正在运行一些测试来比较 C 和 Java 并遇到了一些有趣的事情 在 main 调用的函数中 而不是在 main 本身中 运行具有优化级别 1 O1 的完全相同的基准代码 导致性能大约翻倍 我正在打印 test t 的大小 以毫无疑问地验
  • 如何在 Debian 上编译 DOS 程序?

    在我的汇编语言课程中 我们使用 DPMI 编写 DOS 程序 不幸的是 我无法一直使用 32 位 Windows 机器 我在我使用的几乎每台计算机上都安装了 Debian 虚拟机 我已经安装了 DOSBox 和 DOSEMU 有什么办法可以
  • 如何使用movntdqa避免缓存污染?

    我正在尝试编写一个 memcpy 函数 该函数不会将源内存加载到 CPU 缓存中 目的是避免缓存污染 下面的 memcpy 函数可以工作 但会像标准 memcpy 一样污染缓存 我正在使用带有 Visual C 2008 Express 的
  • linux x86 汇编语言 sys_read 调用的第一个参数应为 0 (stdin)

    我正在编写一个简单的汇编程序来从标准输入读取 如 scanf 这是我的代码 section bss num resb 5 section txt global start start mov eax 3 sys read mov ebx 0
  • X86 预取优化:“计算 goto”线程代码

    我有一个相当重要的问题 我的计算图有循环和多个 计算路径 我没有制作一个调度程序循环 其中每个顶点将被一一调用 而是将所有预先分配的 框架对象 放置在堆中 代码 数据 这有点类似于线程代码 甚至更好 CPS 只是在堆中跳转 执行代码 每个代
  • 如何编译GCC生成的asm?

    我正在玩一些汇编代码 有些事情困扰着我 我编译这个 include
  • 为什么 clang 使用 -O0 生成低效的 asm(对于这个简单的浮点和)?

    我正在 llvm clang Apple LLVM 版本 8 0 0 clang 800 0 42 1 上反汇编此代码 int main float a 0 151234 float b 0 2 float c a b printf f c
  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • 在 x86 汇编中将 64 位常量移至内存

    我正在使用 Intel x64 程序集 NASM 编译器 尝试将 0x4000000000000000 常量移至内存 该常量在 ieee 754 标准双精度中应等于 2 0 我正在使用的代码是 define two 0x4000000000
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 何时可以重用avx指令中的源寄存器

    在 avx 指令中用作源的寄存器何时可以在指令开始处理后重用 例如 我想使用vgatherdps该指令消耗两个 ymm 寄存器 其中之一是位移索引 我意识到vgatherdps由于数据的局部性较差 因此需要花费大量时间来收集 位移索引寄存器
  • 整数溢出问题

    我不断遇到整数溢出问题 我不知道如何解决它 有人可以帮忙吗 edx 包含 181 eax 包含 174 xor eax edx mov edx 2 div edx 假设你谈论的是x86 div edx这实际上没有意义 32位div将edx

随机推荐

  • setTimeout 之后事件 currentTarget 发生变化

    考虑 let sel document getElementById mys sel onchange function e console log e currentTarget null false setTimeout e gt co
  • 如何使用 Eleventy 将多个 Markdown 文件合并到 Nunjucks 模板中?

    CONTEXT Eleventy 和 Nunjucks 以及 Markdown 大量长文本 使用 Markdown 更容易创建 编辑 复杂的布局 对于 SSG 来说还是新手 GOAL 使用 Markdown 管理文本内容块 将这些 Mark
  • 打印日历月

    实现打印给定月份和年份的日历的函数 首先 提示用户 Enter the month and year 一旦用户输入有效的输入 由空格分隔的两个整数 就以类似于 UNIX 输出的格式打印出日历cal命令 例如 如果用户输入03 2014 输出
  • 了解 Spark 结构化流并行性

    我是 Spark 世界的新手 正在努力解决一些概念 使用来自 Kafka 的 Spark Structured Streaming 采购时 并行性是如何发生的 让我们考虑以下代码片段 SparkSession spark SparkSess
  • AWS Lambda 中 Python 全局变量的范围

    AWS Lambda 中全局变量的范围或生命周期是多少 例如 如果我做这样的事情 cache def lambda handler event context do something with cache do something els
  • 显示我的“乘坐优步前往那里”按钮的预计到达时间和预计金额选项

    我已将 搭乘 Uber 前往那里 按钮集成到我的应用程序中 我觉得 如果我显示目的地的预计到达时间和预计价格 对用户来说会更方便 我怎样才能实现这个目标 我现在正在遵循本指南 https github com uber rides ios
  • 将 RGB 图像数组乘以标量后,使用 plt.imshow 获取黑色图

    所以我有点困惑为什么会发生这种情况 I have a binary image 现在我想将此二进制图像转换为 RGB 空间 因此我使用dstack连接第三轴的函数 Everything works fine so far but now I
  • 从数组中删除 JSON 对象会创建“未定义”对象

    我在使用 JSON 和数组时遇到一些问题 我已经摆弄 JSON 一段时间了 并尝试通过重构旧的实现来在生产中使用一些 JSON 我有两个隐藏的文本字段 一个以 1 2 3 等格式存储 id 另一个名称 name1 name2 name3 所
  • 如何在git上共享Xcode性能测试基线?

    I have performance tests on Xcode with a baseline set as shown below 这些基线似乎是本地保存的 如断点 因此我对它们的更改不会通过 git 传输 当除了我之外的任何人运行我
  • dropzone.js 使用 content-type 直接上传到 S3

    我目前正在使用 dropzone js 通过预先签名的 URL 将图像上传到 S3 一切正常 除了我无法设置正在上传的文件的内容类型 默认情况下 它们都是通过以下方式上传的binary octet stream我无法直接在浏览器中查看它们
  • 从 github 安装/运行 gradle 插件(特别是 arquilian 插件)的正确方法?

    我想在这里使用 arquillian 插件来运行 jetty 8 https github com aslakknutsen arquillian gradle plugin https github com aslakknutsen ar
  • 詹金斯即将关闭

    有时会发生奇怪的事情 詹金斯开始显示 詹金斯将关闭 即使没有人打开此消息并重新启动詹金斯 截屏 我有一个 精简备份 插件 该插件被配置为在备份后关闭 更改了此设置 现在工作正常 找到它有点棘手 因为这个插件不在配置系统下 而是在管理詹金斯下
  • 将字典列表转换为单独的列 pandas

    我想要一个有 1 列字典列表的 df 示例 df testData 1 MLB 2 NBA 3 NFL 分为以下内容 Number Sport 1 MLB 2 NBA 3 NFL 我尝试过以下方法 pd DataFrame df testD
  • Objective C:Posing 可以在 ios 上使用吗?

    我正在尝试为一个 ios 项目实现摆姿势 场景 在运行时定义控制器类 https stackoverflow com questions 29424934 defining class of controller at run time 我
  • PHP、SQL通过php变量限制查询

    PHP代码定义变量sqlshowvalue sqlshowvalue 5 if isset POST showmore sqlshowvalue 5 所以我连接到我的数据库 然后当我使用上面刚刚定义的变量运行下面的 SQL 查询时 resu
  • 跟踪类实例中的状态

    我想创建一个具有某些内部状态 可能是加载 错误或成功 的类 我还想在类上有一些可以检查此类状态的方法 理想的API function f x LoadingError
  • 如何使用.net更改Word文档的字体大小

    我正在使用 C 和 Spire Doc 开发一个应用程序 它将 Word 文档保存为指定的格式 其中包括标题处的徽标以及指定的字体大小和样式 现在我可以使用 spire doc 在标题处粘贴徽标 但我无法更改font风格和size整个文件的
  • iPhone 表格单元格标签未对齐

    如同上一个问题 https stackoverflow com questions 1770872 text misalignment on tableview cells on iphone device 我的表格单元格中的文本对齐有问题
  • JWT 令牌与 AJAX、非 AJAX、JQuery

    我对在登录 提交和重定向期间管理 JWT 令牌感到有点沮丧 在开始之前 先介绍一下我的技术堆栈 以防万一 JQuery Html gt Node Js gt Java Restful Services gt MySQL 我的 java Re
  • 有什么方法可以触发 RDTSC 的传统模式吗?

    我重写了整个问题 人们显然不理解 RDTSC 用于计算 CPU 周期 它随 CPU 限制而变化 目前 RDTSC 不随 CPU 限制而变化 一些旧的应用程序期望 RDTSC 随 CPU 限制而变化 我如何让 RDTSC 满足他们的期望 我不