システムメモリサイズの取得(BIOS)
5431 ワード
これまでのOSの様子です.32ビット保護モードからIA-32 e(64ビット)モードへの移行を準備します.
メモリサイズを求めるコードが直接アクセスして値を記録する方法だと説明していますが、私はこの方法が好きではありません.cpu-zのようなプログラムでは、メモリがいくつかのスロットに使われていることもわかりますが、この方法はあまりにも一般的だと思います.
これは最も簡単な方法です.eax=0 xE 820の場合、現在のシステムのメモリマッピングは0 x 15割り込みで取得できます.下図に示すように、Base-Longth-Typeとして格納されます.
使用方法は、EAXに0 xE 820、ECXに24(10進数)、EDXに0 x 534 D 4150、
ES:DIメモリマッピングを格納するアドレスを設定すると、呼び出し0 x 15が中断する.終了基準はEBX=0です.
メモリマッピングはBase-Longth-Typeの24バイトで格納されます.このため、一度コールするとDIも24増加する.
もちろんBIOS割り込みなので、16ビットリアルモードで呼び出す必要があります.以下のコードは、0 x 7 E 00にマッピング数を格納し、0 x 7 E 08からメモリマッピングを格納する.
これは、CPU-Z、HWMoitorなどのプログラムで使用される方式です.コンピュータが大きくなると、マザーボードのデバイスが
「私はアクションをしています~」とメッセージを送り、送信したメッセージを利用します.
そうですね.今はまだ分かりません.PCIコンフィギュレーションスペースでアクセスしたようです.後で64ビットのオペレーティングシステムの基礎があって、私は整理して更にアップロードしたいです.
うん...PCIは前回Virtual box One Exploitで少し勉強してよかったですハハ
メモリサイズを求めるコードが直接アクセスして値を記録する方法だと説明していますが、私はこの方法が好きではありません.cpu-zのようなプログラムでは、メモリがいくつかのスロットに使われていることもわかりますが、この方法はあまりにも一般的だと思います.
バイオス割込み取得
これは最も簡単な方法です.eax=0 xE 820の場合、現在のシステムのメモリマッピングは0 x 15割り込みで取得できます.下図に示すように、Base-Longth-Typeとして格納されます.
使用方法は、EAXに0 xE 820、ECXに24(10進数)、EDXに0 x 534 D 4150、
ES:DIメモリマッピングを格納するアドレスを設定すると、呼び出し0 x 15が中断する.終了基準はEBX=0です.
メモリマッピングはBase-Longth-Typeの24バイトで格納されます.このため、一度コールするとDIも24増加する.
もちろんBIOS割り込みなので、16ビットリアルモードで呼び出す必要があります.以下のコードは、0 x 7 E 00にマッピング数を格納し、0 x 7 E 08からメモリマッピングを格納する.
DETECT_INIT:
mov ebx, 0 ; ebx 초기화
mov edx, 0x534D4150 ; 매직 넘버
mov ax , 0x7E0
mov es, ax
mov di, 0
mov byte [es:0], 0 ; 0x7E00 = 맵 개수
add di, 0x8 ; 0x7E08 = 맵 시작
DETECT_ENTRY:
mov eax, 0xE820
mov ecx, 24
int 0x15
add byte [es:0], 1
cmp ebx, 0
je DETECT_END
add di, 24
jmp DETECT_ENTRY
DETECT_END:
次に保護モードに入り、そのアドレスの値を読めばよい.簡単なC言語コードは以下のコードを記述することができる.DWORD kGetTotalMemorySize32()
{
int mapCount = *(int*)(0x7E00); //메모리 맵 개수
int* mapAddr = (int*)(0x7E08);
int totalSize = 0;
for(int i = 0; i< mapCount; i++)
{
totalSize += *(mapAddr+2);
mapAddr += 6;
}
return totalSize;
}
Serial Presense Detection
これは、CPU-Z、HWMoitorなどのプログラムで使用される方式です.コンピュータが大きくなると、マザーボードのデバイスが
「私はアクションをしています~」とメッセージを送り、送信したメッセージを利用します.
そうですね.今はまだ分かりません.PCIコンフィギュレーションスペースでアクセスしたようです.後で64ビットのオペレーティングシステムの基礎があって、私は整理して更にアップロードしたいです.
うん...PCIは前回Virtual box One Exploitで少し勉強してよかったですハハ
Reference
この問題について(システムメモリサイズの取得(BIOS)), 我々は、より多くの情報をここで見つけました https://velog.io/@kunshim/시스템-메모리-크기-구하기BIOSテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol