📄 ntldr其他相关函数分析.mht
字号:
</SPAN> <BR>;<SPAN style=3D"DISPLAY: none"> =
=1A7=13=08=11=1Am=3Dsi=20
</SPAN> <BR>; Enable protect and paging mode<SPAN=20
style=3D"DISPLAY: none"> plgh;=17|i(^ </SPAN> <BR>;<SPAN=20
style=3D"DISPLAY: none"> (=11]u=1Bj$m[0 </SPAN> <BR> =
mov=20
eax,cr0<SPAN style=3D"DISPLAY: none"> &if^=10B =
=3D=12=20
</SPAN> <BR><SPAN style=3D"DISPLAY: none">xS'EXDpr=02u =
</SPAN> <BR>;=20
If we're enabling protect mode for the first time, don't turn on=20
paging<SPAN style=3D"DISPLAY: none"> EeAts=06z=18(=3D =
</SPAN> <BR>; because=20
the osloader does all that. However, if we're returning to<SPAN=20
style=3D"DISPLAY: none"> !n=07=0FLyxGm; </SPAN> <BR>; =
protected mode, the=20
page tables are already setup, therefore we do want<SPAN=20
style=3D"DISPLAY: none"> =08:q{?YRy=0F=19 </SPAN> <BR>; to =
turn paging=20
on.<SPAN style=3D"DISPLAY: none"> v=1D=02;,a;J9O =
</SPAN> <BR> =20
or dx,dx<SPAN style=3D"DISPLAY: none"> H{q 1Dp1~'=20
</SPAN> <BR> jz only_prot<SPAN=20
style=3D"DISPLAY: none"> btw,6O=1F-=028 </SPAN> <BR> =
or =20
eax,PROT_MODE + ENABLE_PAGING<SPAN style=3D"DISPLAY: none"> =
C=18=1CA=0E\|Eq7 </SPAN> <BR> mov =
cr0,eax<SPAN=20
style=3D"DISPLAY: none"> =02=0Ek=16U o+\1 </SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">R$L&H}m4I# </SPAN> <BR>;<SPAN=20
style=3D"DISPLAY: none"> E=1E_=04=16(=10=028b </SPAN> <BR>; =
The following JMP=20
must be DWORD-aligned in order to avoid an obscure i386<SPAN=20
style=3D"DISPLAY: none"> U=04SDS=01y4=06' </SPAN> <BR>; =
hardware bug. If not,=20
it is possible (albeit unlikely) that the prefetch<SPAN=20
style=3D"DISPLAY: none"> Y=03w}r;-#B< </SPAN> <BR>; queue =
can get=20
trashed.<SPAN style=3D"DISPLAY: none"> \RV^'=10b=3Dhi =
</SPAN> <BR>;<SPAN=20
style=3D"DISPLAY: none"> og4p*r;=06Oh </SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">>g=1EkUHi"0=11 </SPAN> <BR>ALIGN =
4<SPAN=20
style=3D"DISPLAY: none"> T=18f=18zR 0=0F5 </SPAN> <BR> =
jmp=20
flush<SPAN style=3D"DISPLAY: none"> L$=14"nmbBb- =
</SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">=19 >ufDEu-" </SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">Ikq'=13=157=17`=15 =
</SPAN> <BR>only_prot:<SPAN=20
style=3D"DISPLAY: none"> L;Q0f}n%=0E' </SPAN> <BR> =
or =20
eax,PROT_MODE<SPAN style=3D"DISPLAY: none"> =
'4=04=17mc*'=1CB=20
</SPAN> <BR> mov cr0,eax<SPAN=20
style=3D"DISPLAY: none"> ZZ6=3D Kxs\- </SPAN> <BR>;<SPAN=20
style=3D"DISPLAY: none"> aG:l}D=19fL=16 </SPAN> <BR>; Flush =
the prefetch=20
queue<SPAN style=3D"DISPLAY: none"> `h,2=12)4O=10 =
</SPAN> <BR>;<SPAN=20
style=3D"DISPLAY: none"> CA'=08<a?%61 </SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">I*g_+Bq9OO </SPAN> <BR>ALIGN 4<SPAN=20
style=3D"DISPLAY: none"> j9=18 IkEBB6 </SPAN> <BR> =
jmp=20
flush<SPAN style=3D"DISPLAY: none"> pj=15w7LDU=03=16=20
</SPAN> <BR>flush:<SPAN style=3D"DISPLAY: none"> q?@ =
=08h<drM=20
</SPAN> <BR><SPAN style=3D"DISPLAY: =
none">:=05=03XD>M3=02=04=20
</SPAN> <BR><SPAN style=3D"DISPLAY: none">4l6Wv=1Af=1EDX=20
</SPAN> <BR>;<SPAN style=3D"DISPLAY: none"> ZfY*Xz G=04I=20
</SPAN> <BR>; Load CS with the SU module's code selector<SPAN =
style=3D"DISPLAY: none"> ]W=14=05K=1C=3Dvt </SPAN> <BR>;<SPAN =
style=3D"DISPLAY: none"> 7"iBv%=0F=03E=03 </SPAN> <BR> =
push=20
SuCodeSelector<SPAN style=3D"DISPLAY: none"> =
kk9]=13B=3D`=14=0E=20
</SPAN> <BR> push offset cs:restart<SPAN=20
style=3D"DISPLAY: none"> =1F6}=022dW =0Eq </SPAN> <BR> =
retf<SPAN=20
style=3D"DISPLAY: none"> zXYrN_=15=05-k </SPAN> <BR>;<SPAN=20
style=3D"DISPLAY: none"> =15=10srTy~=1A=13=1D </SPAN> <BR>; =
Now load DS and SS=20
with the SU module's protect mode data selector.<SPAN=20
style=3D"DISPLAY: none"> H5&*=17:LB=04=1D =
</SPAN> <BR>;<SPAN=20
style=3D"DISPLAY: none"> hJ 2%=10=0F=16=07 </SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">XZ=03^[1V{ </SPAN> <BR>restart:<SPAN=20
style=3D"DISPLAY: none"> <ZFnm=07OTA </SPAN> <BR> =
mov=20
ax,SuDataSelector<SPAN style=3D"DISPLAY: none"> =
w-&MO/vJPt=20
</SPAN> <BR> mov ds,ax<SPAN=20
style=3D"DISPLAY: none"> ;Ru/:=06D5p </SPAN> <BR> =
mov =20
ss,ax<SPAN style=3D"DISPLAY: none"> .=15-, UJ]rW =
</SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">Bjj=0E"%z=14Ah </SPAN> <BR>;<SPAN=20
style=3D"DISPLAY: none"> R 5xIh=04 </SPAN> <BR>; Load LDT =
with zero since=20
it will never be used.<SPAN style=3D"DISPLAY: none"> vs-fdm=05MW;=20
</SPAN> <BR>;<SPAN style=3D"DISPLAY: none"> ) =
=14t3CJ&=0E[=20
</SPAN> <BR> xor bx,bx<SPAN=20
style=3D"DISPLAY: none"> <L.T=18=11Z=135H =
</SPAN> <BR> lldt=20
bx<SPAN style=3D"DISPLAY: none"> =14UYog1o p=11 =
</SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">'-!~=1BU\a^r </SPAN> <BR>;<SPAN=20
style=3D"DISPLAY: none"> 6:fI=16=15$%=1F% </SPAN> <BR>; Load =
the Task=20
Register and return to the boot SU module.<SPAN style=3D"DISPLAY: =
none">=20
%=12C8r=18;=3D%| </SPAN> <BR>;<SPAN style=3D"DISPLAY: none"> =
`;=15=15=1A>=13=06LI=20
</SPAN> <BR> or dx,dx<SPAN=20
style=3D"DISPLAY: none"> H=19F8`ry f[ </SPAN> <BR> =
jnz=20
epp10<SPAN style=3D"DISPLAY: none"> j_tvlr+H=12=1E=20
</SPAN> <BR><SPAN style=3D"DISPLAY: none">*X+EsZ=1E=13hG=20
</SPAN> <BR><SPAN style=3D"DISPLAY: none">=11qj=08=05'@;N~=20
</SPAN> <BR> mov =
bx,TSS_Selector<SPAN=20
style=3D"DISPLAY: none"> R%=12b3RN\c=3D </SPAN> <BR> =
ltr=20
bx<SPAN style=3D"DISPLAY: none"> E=08=13=13[A{oNQ=20
</SPAN> <BR><SPAN style=3D"DISPLAY: none">=1D=0F =
i=18(=3D{=0E=3D=20
</SPAN> <BR><SPAN style=3D"DISPLAY: none">H=14rS&Hg"y=3D=20
</SPAN> <BR>epp10:<SPAN style=3D"DISPLAY: none"> =10=17 =
d'v=03PV=15=20
</SPAN> <BR> ret<SPAN style=3D"DISPLAY: none"> =
=06=070g.xCP=03=20
</SPAN> <BR><SPAN style=3D"DISPLAY: none">pofPd7TQ=16=20
</SPAN> <BR>_EnableProtectPaging endp<SPAN style=3D"DISPLAY: =
none">=20
f=1D=1C=17)z[~j=08 </SPAN> <BR><SPAN style=3D"DISPLAY: =
none">=1Bn=0E=04X(g|i_=20
</SPAN> <BR>WRITE_PORT_UCHAR =
=BA=EA=BA=AF=CA=FD=B7=D6=CE=F6:<SPAN style=3D"DISPLAY: none">=20
CsK[k=07r# 2 </SPAN> <BR>cPublicProc _WRITE_PORT_UCHAR,2<SPAN =
style=3D"DISPLAY: none"> t zaN8c6Lz </SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">P{"x=10NN R </SPAN> <BR> =
mov =20
dx,[esp+4] ; (dx) =3D Port<SPAN=20
style=3D"DISPLAY: none"> :2>E -f=06| </SPAN> <BR> =
mov=20
al,[esp+8] ; (al) =3D =
Value<SPAN=20
style=3D"DISPLAY: none"> I=0Eci)`=16 w </SPAN> <BR> =
out =20
dx,al<SPAN style=3D"DISPLAY: none"> =1EnsLd A=18)# =
</SPAN> <BR> =20
stdRET _WRITE_PORT_UCHAR<SPAN style=3D"DISPLAY: none"> =
(=19=19=1AGKDY=14=20
</SPAN> <BR><SPAN style=3D"DISPLAY: none">/5M [|Y%=20
</SPAN> <BR>stdENDP _WRITE_PORT_UCHAR<SPAN style=3D"DISPLAY: =
none">=20
>?/-,=12=06=15q2 </SPAN> <BR><SPAN style=3D"DISPLAY: =
none">=16j =07G0 =05=20
</SPAN> <BR>MdShutoffFloppy()=BA=AF=CA=FD=B7=D6=CE=F6:<SPAN =
style=3D"DISPLAY: none">=20
oO=01ls!kS </SPAN> <BR>VOID MdShutoffFloppy( VOID )<SPAN=20
style=3D"DISPLAY: none"> (U=15:Id2E<=10 </SPAN> <BR>// =
=CA=B5=BC=CA=CB=FB=D6=BB=CA=C7=20
=
WRITE_PORT_UCHAR=BA=EA=BA=AF=CA=FD=B5=C4=BD=D3=BF=DA,=B9=D8=B1=D5=C8=ED=C5=
=CC=C2=ED=B4=EF<SPAN style=3D"DISPLAY: none"> =04^Ea=18hzH=0E=20
</SPAN> <BR>{<SPAN style=3D"DISPLAY: none"> =
f0l8=18=02=1C;=0E.=20
</SPAN> <BR> UCHAR Value;<SPAN style=3D"DISPLAY: none"> =
6}=16;7#JK=1E=20
</SPAN> <BR> // #define FLOPPY_CONTROL_REGISTER=20
(PUCHAR)0x3f2<SPAN style=3D"DISPLAY: none"> =03=14:$=04e[$g{=20
</SPAN> <BR> WRITE_PORT_UCHAR( FLOPPY_CONTROL_REGISTER, =
0xC=20
);<SPAN style=3D"DISPLAY: none"> =03zs"9Je@ u =
</SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">}=1B{4 JaJdH </SPAN> <BR>}<SPAN=20
style=3D"DISPLAY: none"> &,DF{=05R=18=13 =
</SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">v]4f k!=1BOI </SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">)y=04s!VRMXx=20
</SPAN> <BR>BlSelectKernel()=BA=AF=CA=FD=B7=D6=CE=F6:<SPAN =
style=3D"DISPLAY: none"> b*:S=08=20
PT;@ </SPAN> <BR>PCHAR BlSelectKernel(IN ULONG DriveId,<SPAN=20
style=3D"DISPLAY: none"> =16E$Ax'=07M+i </SPAN> <BR>IN PCHAR =
BootFile,<SPAN=20
style=3D"DISPLAY: none"> G=05=077h=04c=03H} </SPAN> <BR>OUT =
PCHAR=20
*LoadOptions,<SPAN style=3D"DISPLAY: none"> kD; =16^=1FY=19=20
</SPAN> <BR> =
IN=20
BOOLEAN UseTimeOut<SPAN style=3D"DISPLAY: none"> =03/=08 zF.0=14G=20
</SPAN> <BR>)<SPAN style=3D"DISPLAY: none"> =1Bm7U-=19Z^G=20
</SPAN> <BR>// =
=D4=DA=B5=A5=BB=FA=C9=CF=B0=B2=D7=B0=CB=AB=CF=B5=CD=B3=B5=C4=C8=CB=B6=BC=D3=
=A6=B8=C3=D6=AA=B5=C0,=D4=DA=C6=F4=B6=AF=B5=C4=B9=FD=B3=CC=D6=D0,=BB=E1=D3=
=D0=B3=F6=CF=D6=D2=BB=B8=F6=D1=A1=D4=F1=B2=CB=B5=A5=C8=C3=C4=E3=D1=A1=D4=F1=
=D2=AA=C6=F4=B6=AF=B5=C4=CF=B5=CD=B3,<SPAN=20
style=3D"DISPLAY: none"> $#^\)4rM}I </SPAN> <BR>//=20
=
=B8=C3=BA=AF=CA=FD=BE=CD=B8=BA=D4=F0=D5=E2=D2=BB=B2=BD.=C6=E4=D6=D0=B5=C4=
=B4=FA=C2=EB=B4=F3=B2=BF=B7=D6=CA=C7=B6=D4boot.ini=CE=C4=BC=FE=B5=C4=BD=E2=
=CE=F6,=CE=D2=D2=D4=C7=B0=CB=B5=B9=FD,=CE=D2=B6=D4=D7=D6=B7=FB=D6=AE=C0=E0=
=B5=C4=B2=D9=D7=F7=B2=BB//=20
=
=CA=C7=CC=AB=D4=DA=D0=D0,=CB=F9=D2=D4=BE=CD=C3=BB=D3=D0=B7=D6=CE=F6,=D7=DC=
=D6=AE=CA=C7=D1=A1=D4=F1boot.ini=C5=E4=D6=C3=CE=C4=BC=FE=D6=D0=D2=AA=C6=F4=
=B6=AF=B5=C4=CF=B5=CD=B3=C4=DA=BA=CB<SPAN style=3D"DISPLAY: none">=20
{=06G=12a^b)&L </SPAN> <BR>Arguments:<SPAN =
style=3D"DISPLAY: none">=20
Cj=07rN]=15n=02: </SPAN> <BR><SPAN style=3D"DISPLAY: =
none">,U%A-bm=01hh=20
</SPAN> <BR> BootFile - Pointer to the beginning of the =
loaded=20
boot.txt file<SPAN style=3D"DISPLAY: none"> =13h;Ggm )| =
</SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">]m=14=06)v/] 3 </SPAN> <BR> =
Debugger -=20
Returns the enable/disable state of the kernel debugger<SPAN=20
style=3D"DISPLAY: none"> =1Fc 4S=12v=12#M </SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">=05m/4@J|=1B$/ </SPAN> <BR> =
UseTimeOut -=20
Supplies whether the boot menu should time out or not.<SPAN=20
style=3D"DISPLAY: none"> WT'j=3D.,=16] </SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">p{+:=12"t=3DmD </SPAN> <BR>Return =
Value:<SPAN=20
style=3D"DISPLAY: none"> =05 `=03Z=18`HGM </SPAN> <BR><SPAN=20
style=3D"DISPLAY: none">&e: WRUWBa </SPAN> <BR> =
Pointer to=20
the name of a kernel to boot.<SPAN style=3D"DISPLAY: none"> =
=1D?[O=0EE=1Bv9X=20
</SPAN> <BR><SPAN style=3D"DISPLAY: none">}+=1D=16=13$4=13p=20
</SPAN> <BR>--*/<SPAN style=3D"DISPLAY: none"> fMSC2N}6@=20
</SPAN> <BR><SPAN style=3D"DISPLAY: none">Yv=07 =08=10`0Q^=20
</SPAN> <BR>{<SPAN style=3D"DISPLAY: none"> |H=1BQpv(q=11=20
</SPAN> <BR> PCHAR *MbLines;<SPAN style=3D"DISPLAY: =
none">=20
=1A=170:9Z7NNX </SPAN> <BR> PCHAR *OsLines;<SPAN=20
style=3D"DISPLAY: none"> #9Lv1 Y=1F( </SPAN> <BR> PCHAR =
*FileLines;<SPAN style=3D"DISPLAY: none"> %M?*=3D=1A3 F =
</SPAN> <BR>#if=20
DBG<SPAN style=3D"DISPLAY: none"> =0Fv.Y=01vyh^` =
</SPAN> <BR> PCHAR=20
*DebugLines;<SPAN style=3D"DISPLAY: none"> =0F)=1E=05'y% iZ=20
</SPAN> <BR> ULONG DebugLineCount;<SPAN =
style=3D"DISPLAY: none">=20
5MX_~8P=07xW </SPAN> <BR>#endif<SPAN style=3D"DISPLAY: none"> =
4d=08!,=17=17~=18x=20
</SPAN> <BR> ULONG FileLineCount;<SPAN =
style=3D"DISPLAY: none"> P=20
tQ0tZ"=3D=19 </SPAN> <BR> ULONG OsLineCount;<SPAN=20
style=3D"DISPLAY: none"> =02=03=1Dk=1E34iO=17 =
</SPAN> <BR> ULONG=20
MbLineCount;<SPAN style=3D"DISPLAY: none"> uBE=036A=17 {7=20
</SPAN> <BR> PCHAR pCurrent;<SPAN style=3D"DISPLAY: =
none"> =1B=20
=1FLc.EECa </SPAN> <BR> PCHAR Option;<SPAN =
style=3D"DISPLAY: none">=20
c9b#<N#pJB </SPAN> <BR> MENU_OPTION=20
MenuOption[MAX_SELECTIONS+1];<SPAN style=3D"DISPLAY: none"> =
Z=16s,ntv!=15;=20
</SPAN> <BR> ULONG NumberSystems=3D0;<SPAN =
style=3D"DISPLAY: none">=20
#Iz"Q=12=3DX8P </SPAN> <BR> ULONG i;<SPAN =
style=3D"DISPLAY: none">=20
=16;QDOh=19=14WQ </SPAN> <BR> LONG Timeout;<SPAN=20
style=3D"DISPLAY: none"> F3,idi~}l </SPAN> <BR> ULONG=20
Selection;<SPAN style=3D"DISPLAY: none"> UZM9 7r=03~F =
</SPAN> <BR> =20
ULONG DefaultSelection=3D0;<SPAN style=3D"DISPLAY: none"> <1 =
T6]=0E{=07b=20
</SPAN> <BR> static CHAR Kernel[128];<SPAN=20
style=3D"DISPLAY: none"> Q^~o2Zr4[\ </SPAN> <BR> CHAR=20
DosName[3];<SPAN style=3D"DISPLAY: none"> 4^PA=04mX=0Fgg =
</SPAN> <BR> =20
PCHAR DefaultPath=3D"C:\\winnt\\";<SPAN style=3D"DISPLAY: none">=20
~D<,{*SU&p </SPAN> <BR> PCHAR DefaultTitle=3D"NT =
(default)";<SPAN style=3D"DISPLAY: none"> =046rL2 =1BFG>=20
</SPAN> <BR> PCHAR p;<SPAN style=3D"DISPLAY: none"> =
=01!"=14b=07=1FxAN=20
</SPAN> <BR><SPAN style=3D"DISPLAY: none">=
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -