Linux 写入CR0的Seg故障

Linux 写入CR0的Seg故障,linux,assembly,x86,Linux,Assembly,X86,我试图在Linux中编写CR0,但我一直遇到一个分段错误。这适用于i386或x86_64的组装。有没有办法绕开这件事 Bellow是设置SEGFULT的代码的一部分 mov eax,0xffffffff ;system call number (sys_write) mov cr0,eax CR0是一个受保护的寄存器。无法在userspace linux应用程序中修改它。CR0是受保护的寄存器。无法在userspace linux应用程序中修改它。您想做什么?从注释中可以看出,您似乎

我试图在Linux中编写CR0,但我一直遇到一个分段错误。这适用于i386或x86_64的组装。有没有办法绕开这件事

Bellow是设置SEGFULT的代码的一部分

mov eax,0xffffffff      ;system call number (sys_write)
mov cr0,eax

CR0是一个受保护的寄存器。无法在userspace linux应用程序中修改它。

CR0是受保护的寄存器。无法在userspace linux应用程序中修改它。

您想做什么?从注释中可以看出,您似乎正在尝试执行系统调用,但0xFFFFFF绝对不是sys_write的编号。我向eax 0xfffffff写信,因为您无法执行mem-to-mem操作。您至少需要一个注册表。即使cr0是一个寄存器,我也只使用eax作为安全的手段。基本上我想关闭用户空间的保护模式。然而,从我最近了解到,cpu现在相当先进,它将代码放在受保护的段中,如果该段没有权限0,则不允许它与某些寄存器发生冲突。将CR0设置为“所有”将禁用缓存,禁用x87 FPU,并执行其他奇怪的操作。看见如果您实际上处于内核模式,就像这个问题上的原始标记所指出的那样,它不会直接出现故障,但用户空间可能很快就会出现故障。您想做什么?从注释中可以看出,您似乎正在尝试执行系统调用,但0xFFFFFF绝对不是sys_write的编号。我向eax 0xfffffff写信,因为您无法执行mem-to-mem操作。您至少需要一个注册表。即使cr0是一个寄存器,我也只使用eax作为安全的手段。基本上我想关闭用户空间的保护模式。然而,从我最近了解到,cpu现在相当先进,它将代码放在受保护的段中,如果该段没有权限0,则不允许它与某些寄存器发生冲突。将CR0设置为“所有”将禁用缓存,禁用x87 FPU,并执行其他奇怪的操作。看见如果您实际上处于内核模式,就像这个问题上的原始标记所指出的那样,它不会直接出现故障,但用户空间可能很快就会出现故障。