ÔÆÌ⺣ - רҵÎÄÕ·¶ÀýÎĵµ×ÊÁÏ·ÖÏíÆ½Ì¨

µ±Ç°Î»ÖãºÊ×Ò³ > Windows NTÒýµ¼¹ý³ÌÔ´´úÂë·ÖÎö

Windows NTÒýµ¼¹ý³ÌÔ´´úÂë·ÖÎö

  • 62 ´ÎÔĶÁ
  • 3 ´ÎÏÂÔØ
  • 2025/7/8 6:31:04

¡­ ¡­

public _RealMode

_RealMode proc near

; ת»»µ½ÊµÄ£Ê½

sgdt fword ptr [_GDTregister]

sidt fword ptr [_IDTregister]

push [saveDS] ; ½«saveDSÈëÕ»,·½±ãÖ®ºóµÄÌø×ª

mov ax,SuDataSelector

mov es,ax

mov fs,ax

mov gs,ax

mov eax,cr0

and eax, not (ENABLE_PAGING + PROT_MODE)

mov cr0,eax

; Ë¢ÐÂÁ÷Ë®Ïß

jmp far ptr here

here:

; Flush TLB

; We don't know where the page directory is, since it wasallocated in the osloader.

; So we don't want to clear out cr3,but we DO want to flush the TLB....

mov eax,cr3

nop ; Fill - Ensure 13 non-page split

nop ; accesses before CR3 load

nop

nop

mov cr3,eax

; ת»»ÎªÊµÄ£Ê½µØÖ·

; ´Ë´¦ÐèÒªÒ»¸öÔ¶Ìø×ª¶ø²»ÊÇÖ¸Áîretf,ÒòΪretf²»ÄÜÕýÈ·µØÖØÖ÷ÃÎÊȨÏÞΪCS

db 0EAh ; JMP FAR PTR

dw offset _TEXT:rmode ; 2000:rmode

dw 02000h

rmode:

pop ax

mov ds,ax

mov ss,ax

; Stamp video pointers for real-mode use

mov si,offset _ScreenStart

mov word ptr [si+2],0b800h

mov si,offset _vp

mov word ptr [si+2],0b800h

lidt fword ptr [_IDTregisterZero]

sti

ret

_RealMode endp

Ntldr µÄʵģʽ´úÂëÊ×ÏÈ»ñµÃ¿ØÖÆ£¬ËüµÄÈÎÎñÊÇ£¬Íê³ÉÐèÔÚ16 λģʽÏÂÖ´Ðеijõʼ»¯¹¤×÷£¬ÀýÈçÇå³ý¼üÅÌ»º³åÇø£¬È»ºóΪÇл»µ½±£»¤Ä£Ê½×öºÃ»ù±¾µÄ»·¾³×¼±¸£¬Ö®ºó½«´¦ÀíÆ÷Çл»µ½±£»¤Ä£Ê½£¨32 λģʽ£©Ï£¬ÕâÑùËü¾Í¿ÉÒÔ·ÃÎÊÕû¸ö32 λµØÖ·¿Õ¼äÁË¡£×îºóËü½«¿ØÖÆÈ¨½»¸øos loader¡£

; _TransferToLoader ;¸Ã×Ó³ÌÐò½«¿ØÖÆÈ¨½»¸øosloader

public _TransferToLoader

_TransferToLoader proc near

mov ebx,dword ptr [esp+2] ; »ñÈ¡Èë¿Úµã²ÎÊý

xor eax,eax

mov ax,[saveDS]

; ÉèÖÃosloaderµÄ¶ÑÕ»

mov cx,KeDataSelector

mov ss,cx

mov esp,LOADER_STACK

; ¼ÓÔØdsºÍes×÷ΪÄÚºËÊý¾ÝÑ¡Ôñ×Ó

mov ds,cx

mov es,cx

; ÉèÖÃÖ¸ÏòÎļþϵͳºÍÒýµ¼ÉÏÏÂÎļǼµÄÖ¸Õë

shl eax,4

xor ecx,ecx

mov cx,offset _BootRecord

add eax,ecx

push eax

push 1010h ; ѹÈë¼ÙµÄ·µ»ØµØÖ·

; ½«Ò»¸ö48λµÄµØÖ·´«¸øloaderµÄÈë¿Úµã

db OVERRIDE

push KeCodeSelector

push ebx

; ½«¿ØÖÆÈ¨½»»¹OS loader

db OVERRIDE

retf

_TransferToLoader endp

Os loader ¸Õ½Ó»ñ¿ØÖÆÊ±£¬´¦ÀíÆ÷ËäÈ»ÒѾ­¹¤×÷ÔÚ±£»¤Ä£Ê½Ï£¬µ«ÊÇËüµÄÐéÄâµØÖ·×ªÒë»úÖÆÉÐ먦Æô£¬ËùÒÔ£¬´¦ÀíÆ÷ÈÔȻֱ½ÓʹÓÃÎïÀíµØÖ·¡£Os loader Ê×ÏÈ×öµÄ¹¤×÷ÊǰÑÎïÀíÄÚ´æ¹ÜÆðÀ´£¬ÓÃÒ»¸öÄÚ´æÃèÊö·û£¨memory descriptor£©Êý×é°Ñÿһ¶ÎÄÚ´æµÄ´óСºÍÓÃ;¼Ç¼ÏÂÀ´£¬È»ºó¹¹ÔìҳĿ¼ºÍÒ³±í£¬Ê¹µÃ16 MB ÒÔϵÄÄÚ´æÄܹ»Í¨¹ýÒ³ÃæÓ³É䣨paging£©»úÖÆ½øÐзÃÎÊ£¬ÔÙÉèÖúÃҳĿ¼¼Ä´æÆ÷£¬²¢´ò¿ªÒ³ÃæÓ³Éä»úÖÆ¡£Ö®ºó£¬os loader ¼ÌÐøÖ´ÐÐÆäËûµÄ³õʼ»¯¹¤×÷£¬°üÀ¨I/O É豸µÄ³õʼ»¯µÈ¡£Èç¹ûËü»¹ÐèÒªµ÷ÓÃBIOS ÖеķþÎñ£¨±ÈÈçÖжÏ13h¡¢ÖжÏ15h µÈ£©£¬Ôò±ØÐë±£»¤ºÃ±£»¤Ä£Ê½ÏµÄÉèÖ㬲¢ÔÝʱÇл»»Øµ½ÊµÄ£Ê½£¬´ý·þÎñÍê³ÉÒÔºóÔÙÇл»µ½±£»¤Ä£Ê½£¬²¢»Ö¸´ÉèÖá£

Windows µÄÒýµ¼Ñ¡Ïî¿ÉÒÔÓÃÀ´Ö¸Ê¾µ±Ç°Õâ´ÎÒýµ¼µÄ¸÷ÖÖ²ÎÊý£¬°üÀ¨ÄÚºËÄ£¿éµÄÎļþÃû³Æ¡¢HAL µÄÎļþÃû³Æ¡¢CPU ²ÎÊý¡¢¸÷ÖÖÄÚ´æ²ÎÊý¡¢µ÷ÊÔ²ÎÊý£¬µÈµÈ¡£¹ØÓÚÕâЩÒýµ¼Ñ¡ÏîµÄÈ«ÃæÁбíºÍ½éÉÜ£¬¿É²Î¿¼[MSDN-BOOT]¡£½ÓÏÂÀ´os loader ¼ÓÔØ²¢Ö´ÐÐNTDETECT.COM ³ÌÐò£¬ÕâÊÇÒ»¸ö16 λʵģʽ³ÌÐò£¬ËüÀûÓÃϵͳµÄBIOS À´²éѯϵͳµÄ»ù±¾É豸ºÍÅäÖÃÐÅÏ¢£¬°üÀ¨ÏµÍ³µÄÈÕÆÚºÍʱ¼ä¡¢×ÜÏßµÄÀàÐÍ¡¢´ÅÅ̵ÄÐÅÏ¢¡¢ÊäÈë/Êä³öµÄ½Ó¿ÚÐÅÏ¢µÈ¡£ÕâЩÐÅÏ¢±»ÊÕ¼¯ÆðÀ´£¬ÔÚÒýµ¼¹ý³ÌµÄºóÆÚ±»´æ·Åµ½×¢²á±íHKLM\\HARDWARE\\DESCRIPTION ¼üµÄÏÂÃæ¡£

´úÂëÕª×Ô\\ntos\\boot\\startup\\i386\\main.c VOID SuMain(

INFPVOIDBtRootDir, INFPDISKBPBBtBiosBlock, INSHORTBtBootDrive ) /*++

Routine Description:

Main entrypoint of the SU module. Control is passed from the boot sector to startup.asm which does some run-time fixups on the stack and data segments and then passes control here. Arguments:

BtRootDir - Address of root directory left in memory by boot sector BtBiosBlock - Address of bios parameter block. BtBootDrive - Drive that we booted from. Returns:

Does not return. Passes control to the OS loader --*/ {

ULONGLoaderEntryPoint; ULONGEisaNumPages; USHORTIsaNumPages;

MEMORY_LIST_ENTRY_far *CurrentEntry; PIMAGE_OPTIONAL_HEADEROptionalHeader; ULONGBlockEnd; ULONGImageSize; ULONGImageBase;

// ±£´æÎļþϵͳÉÏÏÂÎÄÐÅÏ¢

FsContext.BootDrive = (ULONG)BtBootDrive;

FsContext.PointerToBPB = MAKE_FLAT_ADDRESS(BtBiosBlock);

PatchDiskBaseTable();

// »ùÓÚ×ÜÏßÀàÐÍÉèÖûúÆ÷ÀàÐÍ. if (BtIsEisaSystem()) {

MachineType = MACHINE_TYPE_EISA; } else {

if (BtIsMcaSystem()) {

MachineType = MACHINE_TYPE_MCA; } else {

MachineType = MACHINE_TYPE_ISA; }

}

// Èç¹ûϵͳÓÉÈíÅÌÒýµ¼,ÄÇô¹ØµôÈíÅÌÇý¶¯Æ÷ TurnMotorOff();

// ³õʼ»¯ÊÓÆµ×ÓϵͳÒÔʹµÃ´íÎóºÍÒì³£ÐÅÏ¢¿ÉÒÔ±»ÏÔʾ InitializeVideoSubSystem();

ËÑË÷¸ü¶à¹ØÓÚ£º Windows NTÒýµ¼¹ý³ÌÔ´´úÂë·ÖÎö µÄÎĵµ
  • ÊÕ²Ø
  • Î¥¹æ¾Ù±¨
  • °æÈ¨ÈÏÁì
ÏÂÔØÎĵµ10.00 Ôª ¼ÓÈëVIPÃâ·ÑÏÂÔØ
ÍÆ¼öÏÂÔØ
±¾ÎÄ×÷Õߣº...

¹²·ÖÏí92ƪÏà¹ØÎĵµ

Îĵµ¼ò½é£º

¡­ ¡­ public _RealMode _RealMode proc near ; ת»»µ½ÊµÄ£Ê½ sgdt fword ptr [_GDTregister] sidt fword ptr [_IDTregister] push [saveDS] ; ½«saveDSÈëÕ»,·½±ãÖ®ºóµÄÌø×ª mov ax,SuDataSelector mov es,ax mov fs,ax mov gs,ax mov eax,cr0 and eax, not (ENABLE_PAGING +

¡Á ÓοͿì½ÝÏÂÔØÍ¨µÀ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩
µ¥Æª¸¶·ÑÏÂÔØ
ÏÞÊ±ÌØ¼Û£º10 Ôª/·Ý Ô­¼Û:20Ôª
VIP°üÔÂÏÂÔØ
ÌØ¼Û£º29 Ôª/Ô ԭ¼Û:99Ôª
µÍÖÁ 0.3 Ôª/·Ý ÿÔÂÏÂÔØ150·Ý
ȫվÄÚÈÝÃâ·Ñ×ÔÓɸ´ÖÆ
VIP°üÔÂÏÂÔØ
ÌØ¼Û£º29 Ôª/Ô ԭ¼Û:99Ôª
µÍÖÁ 0.3 Ôª/·Ý ÿÔÂÏÂÔØ150·Ý
ȫվÄÚÈÝÃâ·Ñ×ÔÓɸ´ÖÆ
×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£ºfanwen365 QQ£º370150219
Copyright © ÔÆÌ⺣ All Rights Reserved. ËÕICP±¸16052595ºÅ-3 ÍøÕ¾µØÍ¼ ¿Í·þQQ£º370150219 ÓÊÏ䣺370150219@qq.com