禁用L2/L1缓存

4 ubuntu nasm

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

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

INVD

mov eax,cr0

mov eax,40000000H;设置位30

mov cr0,eax

程序编译成功,但是当我尝试运行exe文件时,它就是Seg Faults(我正在使用NASM)

有人可以帮帮我吗?

Tam*_*ege 8

请注意,即使你在内核0因为你在内核中或在受保护模式下在DOS上运行你的工具等,将0x40000000移动到cr0肯定会造成灾难.你看,控制寄存器(cr0)控制影响处理器运行方式的各种因素,例如启用分页,保护模式(不是直接)等.如果你取消所有这些位,你将最终完全不同如果您之前启用了分页,那么环境和获取分段错误就不足为奇了.

你应该这样做:

mov eax,cr0
or eax, 40000000H ;set bit 30 without clearing the others
mov cr0,eax
Run Code Online (Sandbox Code Playgroud)

  • @RCIX:你的通灵调试技巧很棒.我唯一看到的是"......当我尝试运行exe文件时,它会出现Seg Faults ......" (4认同)

Pav*_*aev 0

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