5

我正在尝试禁用 CPU 的内部和外部内存缓存,我的配置在上面:-DELL Precision WorkStation -Intel Core 2 Duo E6550 2.33 GHz -Ubuntu 8.10

我尝试通过 BIOS 禁用它,但似乎 DELL 计算机不允许用户访问缓存内存,我发现还有另一种方法,即以编程方式禁用缓存,英特尔架构手册 A.3 表明 cr0 寄存器可以通过设置位 30 设置为禁用缓存,然后我编写了上面的代码:

内向

移动 eax,cr0

mov eax,40000000H ;设置位 30

mov cr0,eax

程序编译成功,但是当我尝试运行 exe 文件时,出现Seg Faults(我使用的是 NASM)

任何人都可以帮助我吗?

4

8 回答 8

9

请注意,即使您因为在内核中或在 DOS 上以保护模式运行工具等而处于环 0 中,将0x40000000移动到cr0肯定会导致灾难。您会看到,控制寄存器 (cr0) 控制着影响处理器运行方式的各种事物,例如启用分页、保护模式(不是直接)等。如果您取消设置所有这些位,您最终将处于完全不同的状态如果您之前启用了分页,那么出现分段错误一点也不奇怪。

你应该这样做:

mov eax,cr0
or eax, 40000000H ;set bit 30 without clearing the others
mov cr0,eax
于 2009-07-10T09:25:43.933 回答
4

我在维基百科的控制寄存器上找到了这个文件。这证实了你所说的:

CR0 寄存器在 386 和更高版本的处理器上为 32 位长。在长模式的 x86-64 处理器上,它(和其他控制寄存器)是 64 位长。CR0 具有修改处理器基本操作的各种控制标志。位名称 全名 描述 31 PG Paging 如果为 1,启用分页并使用 CR3 寄存器,否则禁用分页 30 CD Cache 禁用

这让我看到了Intel 64 and IA-32 Architectures Software Developer's Manual。它说,我在这里再次引用:

大多数系统限制应用程序对系统寄存器(EFLAGS 寄存器除外)的访问。但是,系统可以设计为所有程序和过程都在最高特权级别(特权级别 0)运行。在这种情况下,应用程序将被允许修改系统寄存器。

可能您的程序在语义上是正确的您的代码有一个错误可能会锁定机器,但即使修复它也需要在主管模式下运行。请注意,您需要or输入值以免影响其他寄存器(正如其他人所指出的那样)。

于 2009-07-10T09:06:40.680 回答
3

这应该是“或 eax,40000000h”来设置第 30 位。但是无论如何都不允许用户进程更改控制寄存器。您需要在内核中进行更改。我不会怀疑有一些系统调用或设备接口可以做你想做的事。

于 2009-07-10T09:05:20.980 回答
2

您需要从 Windows 或 linux 上的驱动程序执行此操作,因为只有内核在梯级 0 中运行,我认为您不能为一个进程执行此操作,您必须为所有进程执行此操作。

我假设您正在尝试在没有缓存的情况下进行内存写入?

如果您尝试编写可怕的线程代码,也许您想查看缓存刷新指令?

于 2009-07-10T09:08:20.973 回答
0

如果任何在用户模式下运行的代码能够做到这一点,我会感到惊讶——那将是一场 DoS 攻击。

于 2009-07-10T08:59:38.073 回答
0

我认为您必须以 root 身份登录才能执行此操作。我想知道你为什么要禁用缓存,很可能禁用 L1 和 L2 会导致计算机锁定。

于 2009-07-10T09:12:02.883 回答
0

我终于可以通过将代码运行为 Ring0 来禁用缓存,谢谢DrJokepu,你给我的链接正是我需要的。但我有新问题,因为当我插入禁用缓存的新模块时,它可以正常工作,我只需要修改我的.ko文件,然后调用编写我的代码的过程init 。但现在我想再次以编程方式重新启用缓存,它应该与编写一个干净的程序女巫重置 cr0 一起工作,并在通过 rmmod 删除模块时调用它,但实际上它什么都不做......我可以检查cat /proc/modules并且它确实删除了它,但显然,在删除它之前它没有调用我的干净程序....

帮助?

于 2009-07-22T08:23:08.980 回答
0

实际上,第二条指令(mov eax,cr0)似乎有Seg错误,我刚刚尝试评论所有其他指令,它确实有seg错误......但我仍然不知道为什么?

我也尝试在运行级别 0 中编译/运行它(telinit 1 命令行作为 root),但它仍然出现段错误......

我想知道控制寄存器0(cr0)是否没有写保护......?

于 2009-07-10T09:43:55.580 回答