首页 文章
  • 2 votes
     answers
     views

    Windows XP:我的程序是否以内核模式运行?

    我目前正在了解Windows操作系统运行的不同模式(内核模式与用户模式),设备驱动程序,各自的优缺点以及计算机安全性 . 我想创建一个实际示例,说明在内核模式下运行的故障设备驱动程序可以对系统做什么,例如破坏用于关键OS进程的内存 . 如何直接在内核模式而不是用户模式下执行代码? 我是否必须编写虚拟设备驱动程序并安装它才能执行此操作? 哪里可以在Windows中阅读有关内核和用户模式的...
  • 2 votes
     answers
     views

    支持分页的Intel 32位保护模式会导致三重故障

    我正在开发一个业余爱好者操作系统,我在身份映射和启用分页方面遇到了麻烦 . 我正在使用Bochs模拟器,我有以下错误消息:= 00691299602e [CPU0] interrupt():门描述符无效sys seg(vector = 0x0e) 00691299602e [CPU0] interrupt():门描述符无效sys seg(vector = 0x08) 00691299602i [C...
  • 12 votes
     answers
     views

    汇编程序使用GDT跳转到保护模式

    我目前正在玩x86 Assember,以提高我的低级编程技能 . 目前,我在32位保护模式下的寻址方案面临一些问题 . 情况如下: 我有一个程序加载在0x7e0,它将CPU切换到保护模式并跳转到代码中的相应标签: [...] code to switch CPU in Protected Mode [...] jmp ProtectedMode [...] bits 32 Protect...
  • 2 votes
     answers
     views

    我可以运行在dosbox中切换到保护模式的汇编程序吗?

    我们正在研究一个汇编程序,它将386处理器从实模式切换到保护模式,然后再切换回实模式 . 该程序使用TASM编译 . 因为这个程序需要做一些特权操作,并且它需要以实模式启动,所以我们需要从DOS运行它 . 为此,我们被告知带上软盘,以便我们可以在大学的计算机上启动DOS . 我想知道是否可以使用Dosbox . 但是它需要在保护模式和实模式下使用 faithfully emulate a I386...
  • 1 votes
     answers
     views

    尝试启用保护模式时的引导循环

    我正在编写一个基本的引导加载程序,我只能在某种环境中编写一个简单的C程序,将其写入硬盘(无文件系统)并运行它 . 这就是我想做的一切 . 这是我到目前为止所做的 . 阶段1: 设置堆栈和段寄存器 将视频模式更改为640x480x8 读取下一个扇区到内存 远远跳到它 第二阶段: 再次设置堆栈和段(我是否需要再次执行此操作?) 设置GDT(这部分让我感到困惑 - 我只是复制...
  • 2 votes
     answers
     views

    我无法将cpu从实模式切换到保护模式

    我按照Nick Blundell的一本书来做这件事 . 我编写了一个MBR程序,它首先在实模式下运行,程序中的一些指令会将cpu切换到保护模式 . 首先,我将GDT设置为: gdt_start: gdt_null: dd 0x0 dd 0x0 gdt_code: dw 0xffff dw 0x0 db 10011010b db 11001111b...
  • 3 votes
     answers
     views

    OS开发 - 在保护模式下执行第一条指令

    我指的是Broken Thorn的操作系统开发教程 . 我目前正处于执行第二阶段引导加载程序以加载GDT并进入保护模式的阶段 . 我了解GDT如何工作以及如何进入保护模式 . 但是,我的困惑是加载 cr0 寄存器后执行的第一条指令: jmp 08h:Stage3 ; far jump to fix CS. Remember that the code selector is 0x8! ...
  • 3 votes
     answers
     views

    如何在CR0中设置PE标志启用保护模式?

    我试图了解一台机器如何从开机到运行内核 . 从我收集到的内容来看,在启动期间切换到保护模式以获得对更多可寻址内存的访问是有用的,即使我们最终将切换到更常规的虚拟内存计划,页面目录和页面表并关闭分段 . 似乎要切换到保护模式3必须要做的事情: 设置全局描述符表(gdt)并使用 lgdt 指令加载它 将控制寄存器CR0中的PE标志位设置为使能(即,值为1) 用 ljmp 执行长跳 我想...
  • 4 votes
     answers
     views

    跳入保护模式时出现三重故障

    我正在开发一个启动加载程序,它将在切换到保护模式后启动到一个简单的内核 . 我在第四章或第五章的某处使用了this paper作为教程 . 从理论上讲,它应该以16位实模式启动,将内核加载到内存中,切换到32位保护模式并开始执行内核代码 . 但是,当我切换到保护模式并远程跳转或跳转到另一个段时,它会出现三重故障 . 这是主引导扇区代码: [org 0x7c00] KERNEL_OFFSET eq...
  • 2 votes
     answers
     views

    尝试从保护模式返回到Real

    我试图在保护之后回到实模式,并且在更改cr0寄存器后处理器刚刚卡住了 . 我正在使用nasm,并将我的程序编译为二进制.img以在virtualbox下作为bootloader运行 . 可能我错过了跳远回到realMain proc的东西 . [org 0x7C00] ; BIOS boot origin [bits 16] ; 16-bit Real Mode jmp start ;Jump ...
  • 0 votes
     answers
     views

    保护模式内核三重故障

    我在x86程序集中构建一个内核,用Qemu模拟 . 我有一个从cd加载到0x7C00的引导加载程序 . 如果我放置代码: [BITS 16] [ORG 0x7E00] jmp RealModeStart RealModeStart: mov si, Message call PrintString cli xor ax, ax mov ds, ax ...
  • 6 votes
     answers
     views

    在Linux内核中从真实模式转换为保护模式

    我目前正在研究操作系统的低级组织 . 为了实现我想要了解Linux内核是如何加载的 . 我无法理解的是从16位(实模式)到32位(保护模式)的转换 . 它发生在this file . protected_mode_jump 函数对稍后执行的32位代码执行各种辅助计算,然后在 CR0 reguster中启用 PE 位 movl %cr0, %edx orb $X86_CR0_PE, ...
  • 0 votes
     answers
     views

    Bochs:组装远程跳转在虚假内存区域丢失(无效的操作码错误)

    我开始在(NASM)装配中开发一个小玩具操作系统,仅供我娱乐 . 我编写了一个引导加载程序,它将第一个(也是唯一一个)文件从一个名为"kernel.sys"的FAT12文件系统加载到偏移 0x7E00 的内存中 . 在实模式下,内核仅通过BIOS设置适当的视频模式,并进入32位(保护)模式 . 这就是我的问题所在 . 首先,我设置了一个带有3个描述符(null,ring 0代码...
  • 1 votes
     answers
     views

    切换到保护模式后,跳转到32位代码似乎没有生效

    经过与我自己的争论,我终于决定将我的操作系统转移到保护模式 . 但是,我在执行保护模式代码时遇到了一些问题 . OSDev wiki的第一步是启用A20系列,因为快速门,我没有遇到什么麻烦 . 第二部分是加载全局描述符表 . 我按照BrokenThorn娱乐教程使用它作为我的GDT的粗略基础,并将一些长二进制值转换为漂亮和短的十六进制值 . 最后,我将cr0寄存器的最低位设置为1进入保护模式 ....
  • 1 votes
     answers
     views

    我如何找到GDT的内容

    我正在分析一个反汇编的dll并且卡在了线上 mov ebx,fs:[00000004h] 我想找出用这条指令写入ebx的数据的确切物理地址 . gdb告诉我 fs = 0x53. 我已经发现地址取决于模式(受保护或真实),我很确定CPU处于保护模式(参见*) . 所以段fs的开始应该存储在GDT的某个地方,对吧?我还找到了 GDT-register (0x009bd5c0007f) 的地址,但...
  • 0 votes
     answers
     views

    x86 - 保护模式下的分段有什么用途?

    我读到了x86内存分段,我认为我遗漏了一些东西,线性(虚拟)地址是通过从GDT条目(基地址)取32位,从偏移地址取32位而构建的 . 求它们得到一个32位的虚拟地址 . 现在我看到32个偏移位可以跨越所有VA空间,因此实际上不需要使用32位基址 . 所以我得出结论,基地址并没有真正在翻译过程中发挥作用,这让我发现使用分段(在x86保护模式下)的内存保护是无用的,因为我们可以获得具有ring 0权限...
  • 0 votes
     answers
     views

    简单的Bootloader进入保护模式

    我试图为x86架构编写一个简单的引导程序,它应该只输出字符'A',进入保护模式,然后停止 . 我的代码和评论如下: BITS 16 ORG 0x7c00 jmp 0:start ;set cs to 0 start: mov ax,0x7c0 add ax,288 mov ss,ax mov sp,4096 mov ax,0x7c0 mov ds,ax ;Sets segment descr...
  • 1 votes
     answers
     views

    设置全局描述符表和保护模式后不断重新启动

    我必须做错 GDT setup 并切换到 protected mode 因为它不断重启 . 这是我的 kernel.asm 应该设置 GDT 并切换到 protected mode : bits 16 jmp main %include "gdt.inc" main: cli xor ax,ax mov...
  • 10 votes
     answers
     views

    如何在IE保护模式下访问AppData(来自托管BHO)

    我正在用C#编写IE扩展(BHO) . 在受保护模式下运行时(IE的新UAC兼容模式会强制所有扩展以低完整性运行),它会失败,因为它无法访问appdata文件夹中的user.config . 是否有某种方法可以通过较低完整性的进程来标记文件? 如果不这样做,是否有某种方法可以迫使BHO以中等程度的完整性运行? 如果失败了,有没有办法在低完整性文件夹中创建一个低完整性的符号链接,指向AppData中...
  • 24 votes
     answers
     views

    bootloader - 将处理器切换到保护模式

    我很难理解简单的引导装载程序是如何工作的 . 我正在谈论的引导加载程序是麻省理工学院“操作系统工程”课程中的一个 . 首先,让我向您展示BIOS执行的一段汇编代码: [f000:fec3] 0xffec3: lidtw %cs:0x7908 [f000:fec9] 0xffec9: lgdtw %cs:0x7948 [f000:fecf] 0xffecf: mov %c...
  • 0 votes
     answers
     views

    在汇编中切换到保护模式后跳转到内核

    我的第一个问题 我正在开发一个32位模式的简单操作系统(只是为了好玩)但我遇到了一个问题,即在切换到(32位)保护模式后我无法跳转到我的内核 这是我的bootloader.asm [ BITS 16 ] [ ORG 0x7c00 ] jmp start_boot start_boot: KERNEL_OFFSET equ 0x1000 mov [BOOT_DRIVE] , dl mov...

热门问题