F000:0000~FFFF:0000をリアルモード(DOS)で書き込みたい。
ただし、この領域は書き込み保護されています。
CPUとノースブリッジのデータシートを探してみました。
しかし、シャドウラムの書き込み方法が見つかりません。
私のシステム構成:
M/B: ASUS P5B(965P チップセット)
CPU: Intel Pentium 4 シリーズ
F000:0000 ~ FFFF:0000 は、80286 以降のすべてのプロセッサで HMA を指すメモリ範囲です。詳細については、こちらを参照してください。
HIMEM.SYS なしで使用するには、次の操作を行う必要があります。
8042 キーボード コントローラーを直接制御できます。コマンド D1 を使用します。Write Output Port: ポート 60h に書き込まれた次のバイトは、8042 出力ポートに配置されます。
.286
mov al,0d1h ;send command to 8042
out 64h,al
reloop: in al,64h ;check that port 60h is available
or al,02h
jnz reloop
mov al,11100011b ;keep keyboard working and gate a20
out 60h,al
push -1 ;set es=ffffh
pop es
push 00h
pop ds ;set ds=0000h
mov di,10h ;check if it worked, compare
xor si,si ;ffff:0010h to 0000:0000 for 16 bytes
mov cx,di ;set cx to 10h
cld
rep cmpsb ;compare it
je failed
[...] ;worked, copy virus to ffff:xxxx
failed: jmp short failed ;do whatever