【SMI】System Management Interrupt


【環境】

  1. DOS 6.X/debug32
  2. 某廠牌 Laptop

【原理】

  1. OS 透過 SMI/SCM hook BIOS routine,達到所需要的功能。

【所需暫存器】

  1. AX
    1. AH: command
    2. AL: starting value
  2. BX
  3. DX (port number )

【操作】

假設port number 為 0xB2,  starting value 為 0xC3。

  1. Check SMI service(AH=00) ,回傳值 AX=0x4456(DV)  表示成功。
    C:\>debug32
    Debug32 - Version 1.0 - Copyright (C) Larson Computing 1994
    
    CPU = 686, Real Mode, Id/Step = 06FD. A20 disable
    -a 100
    313C:0100 B8C300    mov ax, 00c3
    313C:1013 BAB200    mov dx, b2
    313C:0106 EF        out dx, ax
    313C:0107           [Enter]
    -p=100
    AX=00C3 BX=0000 CX=0000 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
    DS=313C ES=313C SS=313C CS=313C IP=0103 NV UP DI PL NZ NA PO NC
    313C:0103 BAB200        MOV     DX,00B2h
    Trace Interrupt
    - p [按到跑到 out dx, ax]
    ...
    AX=4456 BX=0000 CX=0000 DX=00B2 SP=0000 BP=0000 SI=0000 DI=0000
    DS=313C ES=313C SS=313C CS=313C IP=0107 NV UP DI PL NZ NA PO NC
    313C:0107 D0FF        SAR       BH,1
  2. BIOS廠商自行定義的 SMI(省略)。

【程式】

 

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