首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 組合語言

快速重啟熱鍵:FASTREBOOT 組合語言源碼解析

     編輯:組合語言

程式功能

FASTREBOOT V1.0 是一個極精簡的 TSR 程式,安裝後常駐記憶體,攔截鍵盤中斷(INT 09h),偵測 Ctrl+F10 組合鍵,觸發軟體重啟(INT 19h)。全程不足 80 行,展示了「鍵盤中斷鉤掛、掃描碼識別、鍵盤控制器命令、TSR 常駐」核心流程。

關鍵技術逐行解讀

新 INT 09h 處理器(NEW_INT)

STI                    ; 開啟中斷
PUSH AX, ES
XOR AX, AX
MOV ES, AX             ; ES=0000h (BIOS 資料區)
IN AL, 60h             ; 讀取鍵盤控制器輸出緩衝區 (掃描碼)
TEST AL, 80h           ; Bit7=1 為釋放碼 → 忽略
JNZ EXIT1
TEST BYTE PTR ES:[417h], 4 ; 檢查 Ctrl 鍵旗標 (Bit 2)
JZ EXIT1
CMP AL, 68h            ; F10 掃描碼 = 68h (按下)
JNZ EXIT1
; 符合 Ctrl+F10 → 執行重啟序列
PUSH 所有通用暫存器
IN AL, 61h             ; 讀取鍵盤控制器埠 B
OR AL, 80h             ; 置位 Bit7 (禁止鍵盤)
OUT 61h, AL
MOV AL, 20h            ; EOI 給主 8259A
OUT 20h, AL
CALL MY                ; MY: INT 19h 重啟
POP 所有暫存器
EXIT1:
POP ES, AX
JMP CS:INT9            ; 轉交原 INT 09h

安裝流程(INIT)

  1. CLI 關中斷 → INT 21h/3509h 取得原 INT 09h 向量
  2. 檢查原向量前 2 位元組是否為 'DZ'(本程式特徵碼),防重複安裝
  3. INT 21h/2509h 設定新向量指向 NEW_INT
  4. STI 開中斷 → INT 21h/09h 顯示提示訊息
  5. INT 27h TSR 常駐(保留至 INIT 標籤)

硬體層面細節

  • 掃描碼集:AT 鍵盤 F10 按下碼 = 68h,釋放碼 = E8h(Bit7=1)。程式僅檢查按下碼。
  • 鍵盤控制器埠 61h:Bit7=1 時鎖定鍵盤介面,防止重啟過程中鍵盤干擾。
  • 8259A PIC EOI:OUT 20h, 20h 通知主中斷控制器中斷處理完畢,否則系統掛起。
  • INT 19h:BIOS 開機載入器入口,執行 POST 並從開機裝置載入 MBR,等效於冷開機但略過硬體自檢。

與 CTRLADEL (ID:13329) 比較

特性CTRLADELFASTREBOOT
攔截目標Ctrl+Alt+Del (防重啟)Ctrl+F10 (觸發重啟)
旗標檢查BIOS 417h Bit2+3BIOS 417h Bit2
掃描碼檢查無 (依 BIOS 旗標)60h 端口讀 68h
執行動作清除 Alt 旗標欺騙 BIOS鎖鍵盤 + EOI + INT 19h
防重複標記INT 0CDh 指向版權字串原 INT 09h 前綴 'DZ'

現代啟示

雖然現代 OS 透過 ACPI 電源管理(ResetSystem / Reboot)處理重啟,但「鍵盤掃描碼攔截 → 組合鍵判斷 → 硬體序列觸發」模式廣泛應用於:BIOS 熱鍵、伺服器管理控制器 (BMC) 按鍵處理、嵌入式韌體復原模式進入。FASTREBOOT 是此類邏輯的最小系統實現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved