- 博客(138)
- 资源 (55)
- 收藏
- 关注
转载 页级的保护措施
转自:点击打开链接一、 页的三种保护措施:★ 两种权限保护:supervisor(0、1及2级)和user(3级)★ 两种访问限制:read-only 及 read/write★ PAE 下的 No Exceute 属性保护 二、 supervisor/user保护措施★ PDE/PTE 的 U/S域,0时:supervi
2012-04-05 09:07:51
870
转载 x86 中的算术标志位运用
转自:点击打开链接sub x,y ===> 以此为例 一、用于符号数运算的标志: (OF、ZF、SF) 1、 (OF = 0) && (ZF = 0) && (SF = 0) ZF = 0 : 说明两个算术操作数不相等OF = 0 : 说明结果无溢出SF = 0 : 说明结果为正数-----------------------
2012-04-05 09:07:42
1012
1
转载 real 模式的思考
转自:点击打开链接1.1、real 模式、protected 模式以及 Long 模式的物理资源清楚认识这点: 从物理资源方面看:real 模式是 protected 模式的子集,而 protected 模式是 long 模式的子集。所以:real 模式、protected 模式以及 long 模式的物理资源是一样的。 pro
2012-04-05 09:07:32
789
转载 real 模式下访问 4G 地址空间
转自:点击打开链接在实模式下不受 1M 空间限制访问 4G 空间,实现这个目的仅仅需要一点小“技俩”,这就是某些资料上所说的 big mode2.1 原理 real mode -> protected mode -> real mode 在实模式转化为 protected 模式时,设置好该问 4G 空间的 descriptors,加载进相应的的
2012-04-05 09:07:15
764
转载 proected 模式
转自:点击打开链接x86 的 protected 模式是构建在段机制上,实质上 protected 模式应称为 segmentation protected 模式。整个 protected 模式的核心是 Privilege(权限),众多机制都是围绕 privilege 这个核心元素来构建。3.1、 保护的意图 在久远的 real 模式下的 dos 平台,还是那种“硬件为软
2012-04-05 09:07:04
651
转载 理解 paging
转自:点击打开链接物理地址: linear address ----> paging ----> physical addressSO, 这里主要理解 paging 的来龙去脉。4.1、地址组成physical address = page's base address + offset这个页基址经过几级数据结构(p
2012-04-05 09:06:55
1430
转载 x86 vista 下的 paging
转自:点击打开链接看一个实际的例子:kd> unt!InitBootProcessor+0x3df:81b3a6de fec8 dec al81b3a6e0 f6d8 neg al81b3a6e2 bfe0df8f81 mov edi,offset nt!ExpBootEnviro
2012-04-05 09:06:12
729
转载 x64 win7 下的 paging 实例
转自:点击打开链接再看一看 win7 x64 体系中的 paging 实例:从 windbg 中摘录一段 win7 的 kernel 代码:kd> unt!KeSetProfileIrql+0x1306:fffff800`02bc7c36 33d2 xor edx,edxfffff800`02bc7c38 2401
2012-04-05 09:05:33
928
转载 x86 windows2008 下的 paging 实例
转自:点击打开链接看一看 x86 的 windows server 2008 版本上的 pagingserver 版的 windows 使用了 2M paging kd> unt!KeUpdateSystemTime+0xed:816d502d fa cli816d502e 648b0d1c000000 mov
2012-04-05 09:05:23
619
转载 segmentation 情景分析
转自:点击打开链接用户程序 A 君,是某酒店公寓的新住户,该公寓有若干层,每层有若干寓所,还包括公用的日用百货仓库间,会所等公共设施,是一座自助式的电子化的公寓大厦。 这一天是用户程序 A 君,新入住公寓的日子,管理员 OS 交给了 A 君自己寓所的电子门匙,A 君要凭这条电子门匙在公寓的管理系统里找到自己的寓所。5.1、寻找 room 的 key:segme
2012-04-05 09:05:09
881
转载 x86 winxp 下的 segmentation 实例
转自:点击打开链接使用 bochs 可以很容易很直观地观察调试系统。下面选取一个 xp 启动的实际片断,如下: sregcs:s=0x001b, dl=0x0000ffff, dh=0x00cffa00, valid=1ds:s=0x0023, dl=0x0000ffff, dl=0x00cff300, valid=31ss:s=0x0023, dl=0
2012-04-05 09:04:50
621
转载 x86 的 TSS 任务切换机制
转自:点击打开链接segment descriptors 构建保护模式下的最基本、最根本的执行环境。system descriptors 则构建保护模式下的核心组件:1、TSS descriptor 提供硬件级的进程切换机制2、LDT descriptor 供进程使用多个 descriptor3、Gate descriptor 提供 processor 权限级别的切换机制。
2012-04-05 09:04:39
2927
转载 利用 TSS 机制切换到任何权限级别
转自:点击打开链接利用 TSS 机制可以进行任意权限级别的随意切换是基于:(1)在任何权限下可以更改 eflags.NT 标志位。(2)使用中断返回指令 iret 进行切换到更高级或更低级权限的代码。如下: pushfd /* 这条指令可以在 3 级执行 */ or
2012-04-05 09:04:21
831
转载 LDT descriptor
转自:点击打开链接显然,GDT(global descriptor table)是系统与所有进程共用的。相对于 LDT(local descriptor table)则是进程独享的。GPRs、selector registers、stack pointers、eflags、LDT descriptor、CR3 构成了一个进程的执行环境。 TSS segment 包含了上述几个环境资源
2012-04-05 09:04:03
872
转载 使用 gate 构建保护模式的 protected 核心
转自:点击打开链接x86 下 segment 保护核心就是 gate 机制,x64 的 long 模式下 segment 保护有所弱化,AMD 号称 long 模式取消了 segment 机制,实际上,现阶段的的 x64 体系中,segment 机制是不可取消的。只不过是将平坦内存模式从软件层移到硬件层,等取于取消了 segment 机制。 现在的操作系统都将 protected 重
2012-04-04 13:58:28
1019
转载 gate 的用法
转自:点击打开链接gate descriptor 给出了目标代码的访问途径。上面给出一个直观的访问途径图。这个途径就是:1、gate descriptor 的 selector 给出目标代码的 code segment descriptor2、由目标代码 code segment descriptor 的 base address 得出代码的 base 3、
2012-04-04 13:57:59
1939
转载 x64 下的 segmentation 情形
转自:点击打开链接6.1、 x64 下的物理资源及系统数据结构6.1.1、 segment registers x64 体系在硬件级上最大限度地削弱了 segmentation 段式管理。采用平坦内存管理模式,因此体现出来的思想是 base 为 0、limit 忽略。 但是,x64 还是对 segmentation 提供了某种程度上的支持。体现在 FS 与 GS 的与众
2012-04-04 13:57:25
1168
转载 long mode 下的 call gate
转自:点击打开链接6.1.4、 long mode 下的 call gate6.1.4.1、 64 位的 call gate descriptor 中已经不支持 parameter count 域,offset 域被扩展至 64 位 base 值。情景提示: 64 位的 call gate descriptor 的中 selector 域必须
2012-04-04 13:56:45
727
转载 long mode 下的 TSS 和 task gate
转自:点击打开链接long mode 已经不支持使用 TSS 机制进行任务切换。TSS 必须存在的唯一原因依然是:需要提供每个权限级别的 stack 指针。但是,由于不支持 TSS 任务切换机制,所以,long mode 下的 TSS segment 和原来的 TSS segment 有很大的改变。1、long mode 下的 TSS segment 去掉了必要的执行环境,包括
2012-04-04 13:55:58
839
转载 long mode 下的 interrupt/trap gate
转自:点击打开链接interrupt 与 trap gate 格式是一样的,只是 descriptor type 不一样而已。与 x86 的 interrupt / trap gate 的所不同的是:base 扩展为 64 位、额外增加了 IST 域。 前面提过,由于 interrupt / trap gate 只能放在 IDT 表中,不存在 64/32 位代码共存的现象,所以,in
2012-04-04 13:55:34
1158
转载 data segment 的访问
转自:点击打开链接这里的 data segment 访问控制针使用对 DS、ES、FS 以及 GS selector register 进行访问,不包括 SS selector register,stack segment 访问与一般的 data segment 有些差别。 以 DS 为例代表所有的 data segment 访问(ES、FS 以及 GS),需要的权限条件是:RP
2012-04-04 13:55:08
1326
转载 stack segment 的访问
转自:点击打开链接基于 stack 的访问都将引发 stack 访问控制检查,对于 stack 的访问控制比一般的 data segment 访问检查要严格。用简单的式子表达为:if (RPL == DPL && CPL = DPL) { /* 通过检查,允许访问,加载 descriptor 进入 SS */} else { /* 拒绝访
2012-04-04 13:54:39
1997
转载 使用哪个 segment registers 进行数据的访问
转自:点击打开链接对于 code segment 的访问,都知道是使用 CS selector register 。对于 data segment 的访问,则是根据指令或内存的寻址方式来决定使用哪个 selector registers。1、对于串操作指令来说,在缺省的情况下:源串引用 DS 作为参考对象,目标串引用 ES 作为参考对象。 loadsd
2012-04-04 13:53:54
846
转载 canonical-address 地址形式
转自:点击打开链接canonical-address 地址形式就是:64 位的 linear address(virtual address)中的从 MSB(Most Significant Bit)最高有效位到第 63 位全是 0 或 1 的这种形式。看下面的地址: FFFF8010_bc001000:这是符合 canonical-address 的地址,MSB 是 b
2012-04-04 13:53:31
2539
转载 目标 code segment 的访问
转自:点击打开链接当程序中使用指令 call / jmp,以及通过 int 引发中断例程的执行,这将都是对目标的 code segment 进行访问,当通过权限的检查后程序将会跳转到目标的 code segment 进行执行。 在 code segment 的访问过程中涉及到权限级别的改变,stack 的改变等问题。访问目标 code segment 的几种情形:
2012-04-04 13:53:08
1009
转载 call/jmp offset 段内调用
转自:点击打开链接段内的调用/跳转的特性: 不改变 CS,也就是不用重新加载 code segment descriptor,当然也就不需要进行权限的检查,但是这里需要做 segment 的 limit 检查,检测到越 segment limit 会产生 #GP 异常。 由于在段时调用,所以使用 call offset 时,processor 仅会做 push eip 的处
2012-04-04 13:52:39
1113
转载 使用 call/jmp 直接调用/跳转目标 code segment
转自:点击打开链接直接调用/跳转的形式是: call / jmp selector:offset 这里的 selector 是 code segment selector 直接使用 selector 来索引 code segment,这将引发 CS 的改变,code segment descriptor 最终会被加载到 CS 寄存器里。 在 code segment
2012-04-04 13:52:12
1503
转载 通过 call gate 访问目标 code segment
转自:点击打开链接直接 call / jmp 目标 code segment 不能改变当前的 CPL,若要 call / jmp 高权限的 code segment 必须使用 call gate,在 x86 下还要可以 call / jmp TSS descriptor 或者 call / jmp task gate,但在 64 bit 模式下 TSS 任务切换机制不被支持。
2012-04-04 13:51:44
1312
转载 long mode 模式下 system/gate descriptor 的疑惑
转自:点击打开链接1、 32 位的 system descriptor 与 64 位的 system descriptor(1)compatibility 模式下,LDT / TSS descriptor 还是原来的 32 位的 descriptor,与原来 x86 的 LDT / TSS 意义一致。(2)64 bit 模式下,LDT / TSS descriptor 扩展
2012-04-04 13:51:00
1131
转载 选择 conforming 还是 non-conforming ?
转自:点击打开链接code segment descriptor 的 C 位表示 code segment 是 conforming 还是 non-conforming 类型,C = 1 代表 conforming 类型,C = 0 代表 non-conforming。conforming 类型可以允许低权限向高权限转移,而不需要通过 call-gate。低权限向高权限的 non-conf
2012-04-04 13:50:27
1379
转载 使用 TSS selector 进行任务切换
转自:点击打开链接指令: call 0x20:00000000 jmp 0x20:00000000----------------------------------- selector 0x20 是个 TSS descriptor 的 selector。 TSS descriptor 与 segment descriptor 的格式一致,不同的是 ty
2012-04-04 13:50:00
1451
转载 使用 task gate 进行任务切换
转自:点击打开链接指令: call 0x20:00000000 jmp 0x20:00000000----------------------------------- selector 0x20 是个 task gate 的 selector 这里使用 task gate 任务切换与使用 TSS selector 的情形基本一样。值得注意的
2012-04-04 13:49:32
1072
转载 使用 int n 调用系统例程
转自:点击打开链接IDT(Interrupt Descriptor Table)仅能存放 interrupt-gate、trap-gate 和 task-gate。指令: int 0x80----------------------------------- 0x80 是 vector (中断向量号) 在 x86 下,gate-descriptor
2012-04-04 13:49:01
632
转载 long mode 模式下的中断服务例程
转自:点击打开链接在 long mode 下,gate 是 16 字节的,并取消了对 task gate 的支持。即 IDT 的 entry 是 16 字节的,所以:gate = IDTR.base + vector * 16。 在 long mode 下,code segment descriptor 的 L、D、C 以及 DPL 有效,其它域无效。由于 base 强制为 0,
2012-04-04 13:48:21
1287
转载 bochs调试指令
bochs调试FAQ:1. Q:如何从引导扇区开始设置断点?A: BIOS被载入内存中运行,其引导扇区的地址一般都是在0x7c00,因为在实模式下,逻辑地址和物理地址是一一对应的,所以我们可以在启动bochs调试的命令行下输入 pb 0x7c00或者 vb 0:0x7c00就着输入 cbochs就会在0x7c00处停下 2.
2012-03-29 18:19:29
1822
原创 《80x86汇编语言程序设计》保护模式第一个例题
《80x86汇编语言程序设计》保护模式第一个例题的一些个人理解和注视; 16位偏移的段间直接转移指令的宏定义jump macro selector, offsetv db 0eah ; jmp far 的操作码 dw offsetv dw selector endm; 字符显示宏指令定义echoch macro ascii mov ah, 2 mov dl
2012-03-22 22:23:01
1722
转载 x86 & x64 的保护措施
转自:点击打开链接x64(x86)提供了 segmentation 与 paging 级的保护措施,x86 提供完整的 segmentation 保护措施,而 x64 提供了有限的 segmentation 保护措施。 对于 segmentation 级的保护来说,processor 定义了 4 个权限级别,为:0 ~ 3 级,0 为最高级别,3 为最低级别。0 级能访问所有的
2012-03-22 13:59:40
1208
原创 Bochs安装FreeDOS与调试
最经看《80x86汇编语言程序设计》杨季文等著,里面的保护模式的例子无法调试,后来查到bochs可以调试,就折腾了一番,这里写下吧……>>>>>>>>>>>>>>>>>>>>>>>无耻的分割线>>>>>>>>>>>>>>>>>>>>>>>>下载地址:Bochs:http://bochs.sourceforge.net/FreeDOS:http://www.freedos.org
2012-03-22 13:32:15
8964
原创 《Intel汇编语言程序设计》书中例子编译
刚看到这例子是纠结了……编译不过啊,google后看到不少人便不过……后来经过一番查询,找到了编译方法用masm615编译:除了在例子里连接必要的lib文件外,就是设置masm615的环境变量了,pach里增加masm615的目录,include(没有新建)中增加include的目录,lib中增加lib的目录,例如:pach: x:\masm615\include: x:\masm
2012-03-22 10:22:34
3152
转载 80x86 DIVX子程序跟踪过程
转自:点击打开链接杨季文 80X86汇编语言程序 P352,子程序 DIVX ,使用移位和减法进行除法运算,尝试举例验证之。程序如下:;子程序名:DIVX;功 能:64 位数除以32 位数,商用64 位表示;入口参数:EDX:EAX=被除数; EBX=除数;出口参数:EDX:EAX=商; EB
2012-03-18 23:36:00
731
Windows用户态程序高效排错
2012-05-29
Programming the Microsoft Windows driver model中文
2013-01-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅