05 2009 档案
摘要:最开始的是loadros.asm,它会将ntoskrnl.exe等各个模块读入内存,并跳到0:901000。同时它还会初始化一个_LOADER_PARAMETER_BLOCK数据结构。typedef struct _LOADER_PARAMETER_BLOCK { ULONG Flags; ULONG MemLower; ULONG MemHigher; ULONG BootDevice; ULO...
阅读全文
摘要:主要是两类:不改变特权、改变特权1. 不改变特权级可以用段间、段内的call或者jmp。段间不做判断。段间会看目的段是什么代码段。如果是非一致代码段,则必须CPL=DPL,并且RPL<=DPL。跳转后CPL不变。 如果是一致代码段,对RPL不做判断,则必须CPL>=DPL,即外环可以跳入内环,但CPL不变。2. 改变特权级,必须通过门(调用门、任务门、中断门、陷阱门)。通过门由外环跳入...
阅读全文
摘要:中断一般分为两类,一类是中断,一类是异常。 中断是指硬件的中断信号,因为是不可预知的,所以是异步的。它一般发生在两条计算机指令之间。 中断分为可屏蔽中断和不可屏蔽中断。每个中断都有一个中断号,可屏蔽中断的中断号可以通过8259A设置,不可屏蔽中断号是2。异常又分为故障(Fault)、陷阱(Trap)和中止(Abort)。 软件中断属于陷阱。 中断门和陷阱门的区别是,中断门进入后CPU自动关闭中断,...
阅读全文
摘要:共三种描述符:存储段描述符、系统段描述符、门描述符。 描述符可以放在GDT、LDT、IDT(它只记录中断门和陷阱门)中。其中存储段描述符和系统段描述符记录的的都是一段内存,而门描述符只记录一个入口地址。 当DT=1时,为存储段描述符。类型有 当DT=0时,为系统段描述符。门描述符有四类:任务门,调用门,中断门,陷阱门 门描述符并不描述某种内存段,而是描述控制转移的入口点。这种描述符好比一个同向另一...
阅读全文
摘要:1.查看寄存器 r r eax r gdtr 2.查看pcr !pcr 3.查看idt表 !idt
阅读全文
摘要:本来intel设计TSS的初衷是想通过这个段,来实现操作系统中多任务的切换。但据说使用这个切换任务,会占用很多cpu的时间,并且打破cpu的流水。因而,linux和windows都没有采用tss用作切换任务。tss还记录着“I/O权限位图”。另外tss中还记录着0-2环的esp和ss寄存器。当外环(如ring3)进入内环(如ring0)时,会自动加载tss中内环的esp和s...
阅读全文
摘要:先下载dos622光盘,然后用光盘启动。 格式化c:盘,sys c: 将dos安装程序拷贝到c的临时文件夹下。 然后从硬盘重启,进入临时目录,进行安装。 中间会要求插入软盘,做备份。 安装光驱。
阅读全文
摘要:代码位于\stage2\mbrstart.S 它又包含了grldrstart.S
阅读全文
摘要:今天顺手分析了微软默认安装的mbr程序。 它主要是寻找active partition,然后将这个分区的boot sector 读入7c00,并执行。否则显示错误信息。 读磁盘用到了13H中断,显示用到了10H中断 Typical boot sector code also expects to be loaded at physical address 0x7c00, even though a...
阅读全文
摘要:HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices\DosDevices\C:, would be:A8 E1 B9 D2 00 7E 00 00 00 00 00 00红色数字是MBR中的数字签名,而蓝色数字形成一个64bit的整型,0x00000000007e00,他是LBA的数字。代表这个分区的位置在0x7e00的扇区里。
阅读全文
摘要:有几个概念需要重新梳理一下。 Cylinder-head-sector(CHS) 这里的Cylinder和track容易搞混,track是一个平面的东西,而Cylinder相当于多个track竖着叠起来,形成一个柱状。 CHS可以有三组数字,定位在硬盘中的某一个扇区。可以用LBA (Logical block address)来说明。 LBA 可以和CHS三元组进行相互换算。 见http://e...
阅读全文
摘要:gcc可以通过-Wl将参数传入ld命令 GCC: -Wl,option Pass option as an option to the linker. If option contains commas, it is split into multiple options at the commas. LD: -Tbss org -Tdata org -Ttext orgSame as –sect...
阅读全文
摘要: .text .code32 .globl _start; _start: . = 0x200 //这是让下面的代码偏移量为0x200 movl 0x100,%eax
阅读全文
摘要:SECTIONS{ . = 0x10000; .text : { *(.text) } . = 0x8000000; .data : { *(.data) } .bss : { *(.bss) }} The first line inside the `SECTIONS' command of the above example sets the value o...
阅读全文
摘要:Basic Linker Script Concepts Every loadable or allocatable output section has two addresses. The first is the VMA, or virtual memory address. This is the address the section will have when the output ...
阅读全文
摘要:运行ld –verbose GNU ld version 2.17.50 20060824 Supported emulations: i386pe using internal linker script: ================================================== /* Default linker script...
阅读全文
摘要:为了更好的学习reactos,特意找到了一个很早的版本,用svn取下,http://svn.reactos.org/reactos/tags/ReactOS-0.0.10/reactos带的编译环境里的make版本,有点问题。例如在一级Makefile里,调用make –C XX,会导致错误。 gcc版本呢3.4.5所以采用msys环境。 编译的时候出现几个问题,解决方法如下: 1. ...
阅读全文
摘要:在公司试图访问svn:svn://svn.reactos.org/reactos/trunk/reactos,发现失败,可能是端口被封掉了。于是采用http协议,可以使用。http://svn.reactos.org/reactos/tags/ReactOS-0.0.10/ http://svn.reactos.org/reactos/trunk/reactos/
阅读全文
摘要:1.一般的程序都是可重定位的,变量或者函数的地址,都是用相对地址记录的。并且变量的地址在link后,可以确定相对位置,在加载后才可以确定绝对位置。一般这样都写成函数,用修饰符proc修饰。 2.但有时候需要写非重定位程序,就需要用固定地址引用变量。例如需要写一个bin文件,然后这个bin文件需要被加载到某个地址运行。 这时,在首地址需要写成。这样在编译前,地址就已经确定了。一般用标签,如XXX: ...
阅读全文
摘要:现在从freeldr_main模块下手,找到freeldr_main.rbuild文件。 <!DOCTYPE module SYSTEM "http://www.cnblogs.com/../tools/rbuild/project.dtd"> <module name="freeldr_startup" type="objectlibrary"> <include...
阅读全文
摘要:Makefile中的-include XXX表示如果XXXX文件不存在,不会报错。Makefile会间接包含\tools\rbuild\rbuild.mak。这里简单分析工具rbuild 在reactos的根目中,执行 make rbuild_clean make rbuild rbuild会根据ReactOS-i386.rbuild生成makefile.auto文件,然后makefile.aut...
阅读全文
摘要:首先观察ReactOS根目录中的Makefile文件,其中它 include lib/lib.mak include tools/tools.mak #这里是一些预先准备的一些工具如rbuild -include $(ROS_AUTOMAKE) #这个文件即用rbuild根据ReactOS-i386.rbuild文件生成的makefile.auto文件这里从最简单的tools/tools.mak文...
阅读全文
摘要:1.例如, .PHONY : clean clean : -rm edit $(objects) .PHONY意思表示clean是一个“伪目标” 2.在rm命令前面加了一个小减号的意思就是,也许某些文件出现问题,但不要管,继续做后面的事。 3. $@表示目标文件,(因为@很像靶子,target) $<表示依赖文件 4.静态模式 objects = foo.o bar.o all: $...
阅读全文
摘要:1.httpd.conf中确保LoadModule rewrite_module modules/mod_rewrite.so2. <Directory "C:/php/mywork">… #AllowOverride None改成 AllowOverride All … </Directory>3.实验一建立一个.htaccess文件,目的是将alice.html=&g...
阅读全文
摘要:1.安装Apache包,php直接解压缩就可以 2.将c:\php路径加入到系统变量path中 4.在资源管理器中进入 php 的安装目录,将 php.ini-dist 或 php.ini-recommended 复制一份,命名为 php.ini。然后打开 php.ini。 ;extension=php_mysql.dll 将前面的 ; 号去掉, 改成: extension=php_mysql...
阅读全文
摘要:显示内容分别是:中断索引、中断向量地址、符号表 0: kd> !idt Dumping IDT: 37:806ba78c hal!PicSpuriousService37 3d:806bbc90 hal!HalpApcInterrupt 41:806bbb04 hal!HalpDispatchInterrupt 50:806ba864 hal!HalpApicRebootService 63...
阅读全文
摘要:查看所有驱动和设备名 lm !object \ 查看根目录 !object \device 查看所有设备名 dt _DEVICE_OBJECT XXXX 查看设备对象内容 !devobj XXXX 查看设备对象内容 !object \Driver 查看所有驱动名 dt _DRIVER_OBJECT XXXX 查看驱动对象内容 !drvobj XXXX 查看设备对象内容 !devnode 显示Pnp...
阅读全文
摘要:从对象指针得到名称 RtlInitUnicodeString( &nameString, L"\\Device\\RawCdRom" ); status = IoGetDeviceObjectPointer( &nameString, FILE_READ_ATTRIBUTES, &fileObject, &rawDeviceObject );从名称得到对象指...
阅读全文
摘要:NTSTATUSReadWriteDisk( PDEVICE_OBJECT DeviceObject, ULONG SectorOffset, ULONG IsReadOperation, // = 0 means is a write operation otherwise is read PVOID Buffer, ULONG SectorCount, PIO_STATUS_BLOCK IoS...
阅读全文
摘要:一般情况下,需要先安装VC6,然后再安装DDK2000。 由于这次我安装的是VC6的绿色版,所以很多东西没有注册。 DDK2000自己的批处理会调用vccheck.exe,它回去寻找VC的安装位置。由于我安装的是绿色版的VC,所以肯定是找不到正确路径的。需要自己修改一下注册表。 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOF...
阅读全文
摘要:#include #include #include int main(void){ HANDLE hFile = CreateFile("\\\\.\\G:",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL); DWORD temp; BOOL bRet = DeviceIoControl(hFile,IOCTL_DISK_IS_WR...
阅读全文

浙公网安备 33010602011771号