【Debug32】E820 memory probing


【原理】

  • 透過INT15/E820,讀取 Memory Map,一次讀 20 bytes。

【平台】

  • 主機板: ASUS P5KPL-C/1600。

【工具】

【使用】

  1. 範例一: 用Debug嘗試拿到 e820 的資料。
    C:\>debug32
    Debug32 - Version 1.0
    
    CPU = 686, Real Mode. Id/Step = 0FF2, A20 disable
    -a 100
    317D:0100 mov eax, 0000e820 ; eax = E820
    317D:0106 mov ecx, 14       ; ecx = 20, size of memory 
    317D:010C mov edx, 534d4150 ; edx = ASCII 'SMAP'
    317D:0112 mov di,  200
    317D:0115 int 15 [Enter]
    317D:0117 [Enter] 
    -p [Enter] (-p下個約5次)
    
    AX=4150 BX=0001 CX=0014 DX=4150 SP=0000 BP=0000 SI=0000 DI=0200
    DS=313C ES=313C SS=313C CS=313C IP=0117 NV UP DI PL NZ NA PO NC
    317D:0115 CD15          INT     15h
    Instruction Breakpoint
    
    -d 200 [Enter]
    317D:0200 00 00 00 00 00 00 00 00-00 FC 09 00 00 00 00 00
    317D:0210 01 00 00 00 93 01 83 C4-08 8D 46 F6 89 46 F0 8C
    上面結果為
    Offset Name Value
    00~03 BaseAddrLow 00000000
    04~07 BaseAddrHigh 00000000
    08~0B LengthLow 0009FC00
    0C~0F LengthHigh 00000000
    10~13 Type 00000001

    像上面的探測要一直跑到C Flag或其他條件成立,基本上Sanos那邊code照抄就好。

  2. 範例二: 用E820.EXE嘗試拿到 e820 的資料。
    C:\>e820 >> m
    C:\>type m
    BassLow  BaseHigh  SizeLow  SizeHigh  Type
    ------------------------------------------------------
    00000000 0000      0009FC00 0000    1 AddressRangeMemory(EfiLoaderCode)
    0009FC00 0000      00000400 0000    2 AddressRangeMemory(EfiLoaderData)
    000E4000 0000      0001C000 0000    2 AddressRangeMemory(EfiLoaderData)
    00100000 0000      3FE90000 0000    1 AddressRangeMemory(EfiLoaderCode)
    3FF90000 0000      0000E000 0000    3 AddressRangeMemory(EfiBootServiceCode)
    3FF9E000 0000      00032000 0000    4 AddressRangeMemory(EfiBootServiceData)
    3FFD0000 0000      0000E000 0000    2 AddressRangeMemory(EfiLoaderData)
    3FFE0000 0000      00020000 0000    2 AddressRangeMemory(EfiLoaderData)
    FEE00000 0000      00001000 0000    2 AddressRangeMemory(EfiLoaderData)
    FFF00000 0000      00100000 0000    2 AddressRangeMemory(EfiLoaderData)
    Dump Memory map v1.0.0 by Harrison Hsieh

【參考】

【備註】

  1. 好用的DOS下測試記憶體工具Memtest86+ http://www.memtest.org/

【問題】

  • 如何查看 Status Register?
 

Ed32. Copyright 2008 All Rights Reserved Revolution Two Church theme by Brian Gardner Converted into Blogger Template by Bloganol dot com