- 博客(14)
- 资源 (6)
- 收藏
- 关注
原创 (第三章 11)根据自己内存情况 使用分页机制
一、查看内存分布情况 设置“页目录表”和“页表”之前,最好先查看下内存分布情况,根据“OS可用内存的大小”来设置她们;否则可能设置了太大的“页目录表”和“页表”而浪费了宝贵的内存。 如果傻乎乎地设置“页目录表”和“页表”,我们来看看后果: 假设内存的一个物理块是4KB(=4096B)。我们知道,“页目录表”占用一个内存物理块,而“页目录表”中的每项PD...
2011-06-11 15:51:16 304
原创 参考博客-还有哪些人也在看这本书
这位很详细:http://www.cnblogs.com/wanghj-dz/archive/2011/04/23/2025840.html
2011-06-10 22:46:21 88
原创 跳转指令 jmp、call、ret、retf
JMP、CALL和RET指令的近转移形式只是在当前代码段中执行程序控制转移,因此不会执行特权级检查。JMP、CALL或RET指令的远转移形式会把控制转移到另外一个代码段中,因此处理器一定会执行特权级检查。 1、jmp指令:不影响堆栈。紧紧进行执行流程的跳转,不会保存返回地址。(书P55)对于jmp而言,长短jmp仅仅是结果不同罢了,短跳转对应段内,长跳转对应段间。 ...
2011-06-10 22:42:29 755
原创 (第三章 10)“代码段间跳转” 和 “访问数据段”
下面说明代码段和数据段的访问:一、代码段间跳转1、普通(直接)跳转: JMP Selector:0 或 CALL Selector:01)一致代码段(JMP&CALL) 要求:CPL>=DPL,RPL不作检查 特权变化:跳转后程序CPL=跳转前程序CPL2)非一致代码段(JMP&CALL) 要求:CPL=DPL & RPL...
2011-06-10 15:40:19 257
原创 命令模式——Command
偷懒一下,直接用JavaEye上chjavach老兄的文章了,他讲命令模式用了6节不厌其烦地阐述。虽然冗长,但算是详尽,需要看时下载附件中的电子书和代码即可^_^文中第一个例子“点击按钮开机”非常形象,记清楚以下几点: 1、MainBoardApi,GigaMainBoard(以及MsiMainBoard)是命令接收者接口、命令接收者实现类。好比“主板标...
2011-06-10 10:31:37 161
原创 用shell脚本 改变某目录下一类文件的后缀
编写这个功能主要是由于我的汉王电子书不能查看.asm, .java等格式的文件,因此我需要把他们的后缀改成.txt,不过需要看的东西太多了,索性写一个程序解决! 之前用java写了个改后缀和编码的程序,打成jar包,但由于兼容性问题,运行不了。故此,在Linux下,直接写一个shell脚本来做:########################################...
2011-06-08 16:43:53 581
原创 (第三章 9)“调用门” 和 “利用调用门在高低特权级的转移”
在此之前,先要熟悉汇编指令“长/短jmp”、“长/短call”、ret、retf. 一、调用门“纯粹”作为入口地址 调用门本质上就是个入口地址,只是增加若干属性而已。例子pmtest5a.asm完全将其作为一个地址使用。 二、使用调用门,在不同特权级间转移 使用调用门分为以下两个阶段,难点无非就是“TSS”和“堆栈的变化”。本质上,TSS就是记录了不同特...
2011-06-08 10:34:22 283
原创 (第三章 7)LDT
先展示一下效果图: 直接看代码: 注意到这段代码是在P38 “3.2.1海阔凭鱼跃”那段代码基础上加上LDT得到的,新添加的代码会着重标注出来的^_^ ; ==========================================; pmtest3.asm; 编译方法:nasm pmtest3.asm -o pmtest3.com...
2011-06-06 09:49:27 207
原创 (第三章 6)保护模式下,读写大地址内存 & 从32位保护模式跳回16位实模式(二)...
三、关于保护模式和实模式的跳转和段描述符高速缓冲寄存器(转载) 其实从实模式跳转到保护模式还是很好懂得,主要注意就是跳转指令 jmp dword SelectorCode32:0 //而不能是 jmp SelectorCode32:0 因为这时编译出来的是16位代码。如果目标地址的偏移不是0,而是一个较大的值,比如 jmp Select...
2011-06-06 09:15:20 138
原创 (第三章 5)保护模式下,读写大地址内存 & 从32位保护模式跳回16位实模式(一)...
一、主要功能 在本章最基本代码(P25、chapter3/a/)的基础上实现大地址(超过1M)的读写。在前面程序的基础上新建一个段,这个段以5MB为基址,远远超过1MB的界限。先读出开始处8字节的内容,然后写入一个字符串,再从中读出8字节。 如果读写成功的话,两次读出的内容应该不同,而且第二次读出的内容应该就是我们写进的字符串。字符串是保存在数据段中的,也是新增加的...
2011-06-05 13:53:34 226
原创 (第三章 3)数据段/代码段描述符
一、宏定义和属性常量(代码段/数据段描述符见P32;门描述符见P51)下面是对代码段/数据段描述符的宏定义,目的是为了方便编写描述符。 ; 描述符; usage: Descriptor Base, Limit, Attr; Base: dd -->段基址4字节; Limit: dd (low 20 bits available) ...
2011-06-05 11:53:13 431
原创 (第三章 4)A20地址线
A20地址线困惑我了很久,这篇文章终于揭开了这个谜团。详细阐述之前,我先来总结一把—— 8086/8088和80286地址转换方式一样,寻址范围不一样 。 8086/8088和80286中“逻辑地址-->线性地址”的转换方式是一样的:segment:offset-->segment<<4+offset,而且segment和offset均只有16bit. ...
2011-06-03 20:43:58 542
原创 代理模式Image Proxies(一、最朴素实现)
A Classic Example: Image Proxies 以下是最朴素的代理模式实现,其中只有“代理”的思想,但并不是真正的代理。 一个ImageIconProxy proxy实例被封装在JFrame frame中,且他们都是ShowProxy属性。 点击“Load按钮”触发调用proxy.load(frame),该方法重新设置pro...
2011-06-03 09:27:26 477
原创 策略模式——strategy
Strategy Pattern 本文总结《Design Pattern in Java》 Chap23 Strategy. 以为用户推荐一款烟火制品选择采取不同推荐策略为例。先讲解如果不采用策略模式会怎样,然后将这些代码重构为策略模式。 1、如果不使用策略模式,Customer::getRecommended()...
2011-06-02 12:36:09 131
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人