2011年5月5日

pmtest7.asm中 DispInt (显示一个整数型)的代码解释,DispAL代码的解释

摘要: push dword[esi] ; //push [ds:0x7a],为0x00000000,注意这是指第一次压入堆栈的情况call DispInt //call指令会自动调用堆栈,esp会减4-------------------------------------------------------------------------------------;;显示一个整形数DispInt:mov eax,[esp+4]//注意这里esp+4是因为调入之前的call指令,因为call指令会自动把一些参数入栈,esp要减4,esp+4正好指向了第一次push进去的 0x00000000shr 阅读全文

posted @ 2011-05-05 21:56 wanghj_dz 阅读(615) 评论(0) 推荐(0) 编辑

通过一段汇编,加深对寄存器ESP和EBP的理解

摘要: 一直对寄存器ESP和EBP的概念总是有些混淆,查看定义ESP是栈顶指针,EBP是存取堆栈指针。还是不能很透彻理解。之后借于一段汇编代码,总算是对两者有个比较清晰的理解。下面是按调用约定__stdcall 调用函数test(int p1,int p2)的汇编代码;假设执行函数前堆栈指针ESP为NNpush p2 ;参数2入栈, ESP -= 4h , ESP = NN - 4hpush p1 ;参数1入栈, ESP -= 4h , ESP = NN - 8hcall test ;压入返回地址 ESP -= 4h, ESP = NN - 0Ch ;//进入函数内{push ebp ;保护先前EBP 阅读全文

posted @ 2011-05-05 09:21 wanghj_dz 阅读(1158) 评论(0) 推荐(0) 编辑

2011年5月4日

pmtest7.asm中DispStr代码的解释,DispReturn代码的解释

摘要: DispStr:push ebp //ebp作为存取堆栈指针(存取堆栈中内容时所用到的指针),esp栈顶指针mov ebp,esp //ebp指向堆栈栈顶push ebx //以后要用到bl,所以要压栈先保护起来push esi //源指针push edi //目标指针 执行到这儿时ebp,esp的值已经不一样了。esp因为又压了三次所以加了12,ebp还是原来的ebp,push ebp后的堆栈指针mov esi,[ebp+8] ;pszInfo //跳进来之前push szPMMessage esp-4,push ebp 后esp又-4,esp赋给ebp 所以ebp加8正好指向szPMMes 阅读全文

posted @ 2011-05-04 22:43 wanghj_dz 阅读(961) 评论(0) 推荐(0) 编辑

2011年5月3日

在linux下制作img文件,windows下使用nasm

摘要: 我是先用bximage创建floppy a.img,然后 [root@localhost bochs-2.2.6]# dd if=/root/asm/a/boot.bin of=/usr/local/src/bochs-2.2.6/a.img bs=512 count=1 注意修改boot: floppy [root@localhost bochs-2.2.6]# bochs ... ... 在Bochs屏幕看到Hello World! 自己研究的方法:把书中自带的pm.img用ultralISO软件打开,在linux中用nasm编译成能回到bochs的文件,然后ftp到windows,放到u 阅读全文

posted @ 2011-05-03 16:35 wanghj_dz 阅读(1489) 评论(0) 推荐(0) 编辑

img文件的制作

摘要: 看了一本书,《自己动手写操作系统》(Downloadhttp://www.verycd.com/topics/251695/)。At the beginning,就要写一个很小的“Hello OS world!”小系统,然后用虚拟机跑起来。想要玩玩的可以去下载然后看,根据书中提示,我制作好了boot.asm,然后用nasm编译成boot.bin.但是,书中去没有讲如何制作虚拟软盘镜像IMG,去百度谷歌了一下,也没有教这东东的。奋斗了半天,终于成功搞定,在喜悦的同时不忘告知有同样困扰的Cfan~1、环境系统:Windows 7所用软件:UltraISO,FloppyWritter(下载包中含有此 阅读全文

posted @ 2011-05-03 16:26 wanghj_dz 阅读(1636) 评论(0) 推荐(0) 编辑

pmtest7的调试,从dos返回到bochs

摘要: 转载与看雪学院:http://bbs.pediy.com/showthread.php?t=116110Xiilin:我在看于渊的《Orange'S...》这本书,我调试一个程序时却出现了问题,程序做的事情是首先从实模式切换到保护模式,然后在保护模式下读取0x00500000地址的内存,然后显示出来。我在Bochs虚拟机下的FreeDos系统上用debug32调试的这个程序,可只能调试到这里:mov eax,cr0or eax,1mov cr0,eax ;调试到这一句时,FreeDos会重启麻烦大家给我指点一下,我要怎么样才能继续调试下去?我想跟到保护模式的代码里。---------- 阅读全文

posted @ 2011-05-03 15:48 wanghj_dz 阅读(574) 评论(0) 推荐(0) 编辑

利用bochs调试内核(转载)

摘要: 利用bochs调试内核(主要是在windows下调试)Bochs具有非常强大的操作系统内核调试功能。这也是本文选择Bochs作为首选实验环境的主要原因之一。有关Bochs调试功能的说明参见前面14.2节,这里基于Linux 0.11内核来说明Windows环境下Bochs系统调试操作的基本方法。14.8.1 运行Bochs调试程序我们假设Bochs系统已被安装在目录“C:\Program Files\Bochs-2.1.1\”中,并且Linux 0.11系统的Bochs配置文件名称是bochsrc-hd.bxrc。现在在包含内核Image文件的目录下建立一个简单的批处理文件run.bat,其内 阅读全文

posted @ 2011-05-03 12:11 wanghj_dz 阅读(1142) 评论(0) 推荐(0) 编辑

bochs环境的搭建

摘要: 经过两天的努力终于搭建好bochs的环境。先装好vmware,在虚拟机中先后装了YLMF OS,和Ubuntu10.4但是在安装过程中都出现了我无法解决的问题,果断舍弃之。然后果断参照在linuxdeepin10.12下源码安装bochs-2.4.6 这篇文章,搭建linuxdeepin10.12环境,并按照文章中的步骤成功安装好bochs。bochs源文件下载与bochs网站。终于搭建好了,OK!! 阅读全文

posted @ 2011-05-03 11:57 wanghj_dz 阅读(288) 评论(0) 推荐(1) 编辑

2011年4月26日

利用0E820h int 15h 中断获取内存信息********

摘要: 利用0E820h int 15h 中断获取内存信息; 得到内存数 //这段代码是在实模式下写的。movebx, 0movdi, _MemChkBuf.loop:moveax, 0E820hmovecx, 20movedx, 0534D4150hint15hjcLABEL_MEM_CHK_FAIL//如果产生进位,则跳转。产生进位表示没有成功。adddi, 20incdword [_dwMCRNumber]cmpebx, 0//ebx存放的是下一个ARDS的偏移量,第一个是0,如果ebx重新变为0,说明已经到最后一个ARDS了,遍历结束了。jne.loop //这样[_dwMCRNumber]就 阅读全文

posted @ 2011-04-26 22:33 wanghj_dz 阅读(919) 评论(0) 推荐(0) 编辑

pmtest6.asm代码详细解释,对分页的形成过程有详细的解释

摘要: ; ==========================================; pmtest6.asm; 编译方法:nasm pmtest6.asm -o pmtest6.com; ==========================================%include"pm.inc"; 常量, 宏, 以及一些说明PageDirBaseequ200000h; 页目录开始地址:2MPageTblBaseequ201000h; 页表开始地址:2M + 4Korg0100hjmpLABEL_BEGIN[SECTION .gdt]; GDT; 段基址, 段界 阅读全文

posted @ 2011-04-26 13:51 wanghj_dz 阅读(1034) 评论(0) 推荐(0) 编辑

导航