⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 10.txt

📁 对I386硬件平台的详尽分析,对LINUX内核学习有很大帮助
💻 TXT
字号:
X』、『EE OUT DX,AL』 ,或是其它程式码 ,就可以分 
  > 辨发生的原因是读或写产生的 ,d到 I/O 後 ,你是否会写骗 I/O 的程式 ? 
  > 
  > 以 S-ICE 的拦 I/O 能力为例 ,它先使用 IO-MAP 的方式去拦 I/O ,然後再判别 
  > "EE.E4.EC.E6...." 等等程式码。 
  > 
  > 注:IOMAP 表是也是 TSS 表格的一部份。 
  > -------------------------------------------------------------------------- 
  > ┌───────┐ 
  > │相容性的处理一│ 系统暂存器的相容处理法 
  > └───────┘ 
  > 
  > 或许您曾经在挂入 QEMM386、EMM386 之後 ,在 V86 下执行 MOV EAX,CR0 的指 
  > 令 ,但是前面笔者提到读写系统暂存器必需在最高等级才可执行 ,为什麽 User 仍可 
  > 在最低等级下执行本命令呢 ? 底下是欺骗方式。 
  > 
  > 
  > (User) V86 下执行 MOV EAX,CR0 
  > ↓ 
  > 发生 General Protection 0D 
  > CPU 自动切入保护模式 ,并执行 INT_0D 的处理程式 
  > (堆叠里多储存了错误代码 DWORD) 
  > ↓ 
  > (EMM) 检查发生错误的原因 
  > 读取 EAX,CR0 (因此时已是最高等级 ,本行可以正确执行) 
  > ↓ 
  > (EMM) 修改堆叠内的 EIP 值 ,指向下一行指令 
  > ↓ 
  > (EMM) 修改使用者等级 3 / 设定 VM 旗标等於 1 
  > ↓ 
  > (EMM) ESP 值扣掉错误代码 4byte 
  > ↓ 
  > (EMM) IRETD 切回 V86 
  > ↓ 
  > (User) 使用者取得 EAX 的数值 
  > 
  > 由於程式有一大半在保护模式下执行 ,所以使用者根本感觉不到 ,只知道自己真 
  > 的读到系统暂存器。这便是 EMM 系的欺骗手段。 
  > 
  > 本来标准的程式是不会在 V86 下读写系统暂存器 ,可是确实也有不正常的程式 
  > O这样搞的 ,例如倚天中文会执行 MOV EAX,CR3 ,或是一些保护程式会写入除错暂存 
  > 器 (DRx)。所以为了相容性 ,这些最好做进去。 
  > 
  > 注:判别发生的原因也可以利用判断 I/O 的那种方法 ,但写起来很麻烦。 
  > -------------------------------------------------------------------------- 
  > ┌───────┐ 
  > │相容性的处理二│ HIMEM.SYS 
  > └───────┘ 
  > HIMEM.SYS 是一个可以控制 1MB 以外记忆体的程式 ,不过之前笔者有提过 ,要 
  > 读写超过 1MB 以外的记忆体必需进入保护模式才行(据说有後门可用) ,那麽载入自 
  > 己的保护模式程式後 ,再遇到呼叫 HIMEM.SYS 去搬移 1MB 以外的记忆体 ,电脑竟然 
  > 会发生 GP Err #0D ,原来这是因为 HIMEM.SYS 在执行搬移记忆体的命令後会去呼叫 
  > BIOS 的 AH=87h INT_15h 去搬记忆体 ,换句话说就是因为这个 BIOS 中断会进入保 
  > 护模式去搬记忆体 ,所以才会造成当机 ,因此你的保护模式介面程式必需去模拟这个 
  > BIOS 函式 ,就可以与 HIMEM.SYS 相容了。 
  > 
  > 注:BIOS AH=87h INT_15h 会重设 GDT.IDT 表 ,然後进入保护模式去搬记忆体 ,然後 
  > 就当在 LIDT 或 LGDT 的命令上。 
  > 
  > 另外如果你的程式摆在 1MB 以上的记 擐 }去执行 ,还会有另一个问题产生 , 
  > 不过如果你已经学会上面的这些功能 ,再尝试去写个程式去试试 ,你自然会知道 
  > 它会发生什麽问题 ,解决的办法也很简单 ,你一定会解决。 
  > -------------------------------------------------------------------------- 
  > 切入 V86 後 ,还有很多问题要处理 ,不过上面提到的两个问题如果你都能处理 
  > 的话 ,基本上就不会有其它大问题 ,等你会进入保护模式後 ,再来学习 VCPI、DPMI 
  > 就很简单了。 
  > 
  > 如果各位会切入保护模式的话 ,接下来应该是学习 VCPI 的切入方式 ,虽然有很 
  > 多 y有介绍 ,但是要真正了解并不容易。建议各位去买套大宇出品的激斗战士、战 
  > 国策 ,它的外加保护就是切入保护模式的最佳范例 ,包含透过 VCPI、自己切286.386 
  > 保护模式 ,虽然这是不道德的行为 ,但是却是一个最佳范本。花个五百块学新知绝对 
  > 划算。 
  > 
  > 有关保护模式的部份笔者暂时介绍到此 ,下一集笔者将为您介绍虚拟记忆体 ,如 
  > 果情况允许 ,还会顺便介绍更难懂的分页机能。教各位如何写出类似 S-ICE 的 BPR 
  > 功能 ,锁定某一块记忆体的读写状态。 
  > 
  > 
  > ┌───────────────────────────────────┐ 
  > │ Soft Bugger 软体蛀虫 90:90/2 软体新技术的实行者 │ 
  > │ BBS:02-5955461 24HR ID:Werong Ho -- 软蛀 -- │ 
  > └───────────────────────────────────┘ 
  
  
  
  > 
  > ┌┐┌┐∞ 
  > 【 80386 保护模式简介五 】 ┘└┘└┘ 
  > ========================================================================== 
  > 前言∶ 
  > 底下是进入保护模式、进入 V86 的精简范例 ,执行前请确定 CPU 是处在真实模 
  > 式 ,程式码因为用到 386 指令 ,请用 TASM 3.1 来编译。 
  > -------------------------------------------------------------------------- 
  > ┌──────┐ 
  > │进入保护模式│ 
  > └──────┘ 
  > 
  > 进入保护模式的程式范例 ,其目地是进入保护模式 ,并在保护模式下用绝对记忆 
  > 体读写的方式 ,直接将 'Protection Mode !' 字串写入 Video Ram (B800:0000) , 
  > 本程式以最精简的方式撰写 ,没有任何错误处理 ,因此请确定电脑现在处在真实模式 
  > 下才可执行本程式。(禁挂 EMM 系保护模式软体) 
  > 
  > 程式流程如下∶(底下所指记忆体位址皆为 32bit 绝对位址) 
  > 
  > 1. 设定 GDTtab 表所在的记忆体位址填入 GDTadds 
  > 
  > 2. 设定 Selector 0008 的记忆体起始位址就是现在 CS 的记忆体位址 
  > 设定 Selector 0010 的记忆体起始位址就是现在 CS 的记忆体位址 
  > Selector 0018 的记忆体起始位址就是 000B8000 = (B800:0000) 
  > 
  > 3. 执行 LGDT FWORD PTR CS:GDTadds 告诉 CPU 一但进入保护模式 ,各 
  > 区段的记忆体起始位址、长度 
  > 
  > 4. 设定 CR0 的 Bit0 = '1' ,并透过 JMP 指令进入保护模式 
  > ※ 进入保护模式後 ,DS.ES.SS.CS.GS.FS 等等暂存器定址方式不再 
  > 是 Segment ,而变成 Selector 
  > 
  > 5. 秀字 将 0010:MSG_1 搬到 0018:0000 
  > 意即将 'Protection Mode !' 字串搬到 Video Ram 去 
  > 
  > 6. 设定 CR0 的 Bit0 = '0' ,并透过 JMP 指令回到真实模式 
  > ※ 回到真实模式後 ,DS.ES.SS.CS.GS.FS 等等暂存器定址方式不再 
  > 是 Selector ,而变成 Segment 
  > 
  > 5. 秀字 将 CS:MSG_2 搬到 B800:00A0 
  > 意即将 'Return Real Mode !' 字串搬到 Video Ram 去 
  > 
  > 6. 结束程式 
  > 
  > ----------------------------- P.ASM ------------------------------------ 
  > code segment 
  > assume cs:code,ds:code 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -