網路上流傳一段被稱為「世界程式設計大賽頭名程式」的十六進位碼,聲稱將其存為文字檔,在 DOS 下用 DEBUG 載入執行即可見證其神奇功能。本文將這段機器碼還原分析,揭示其真實面貌。
該程式碼為 x86 即時模式 (Real Mode) 機器碼,起始位址 0100h (COM 檔格式),長度約 4KB。關鍵片段解析:
E100: 33 F6 XOR SI, SI
E102: BF 00 20 MOV DI, 2000h ; 目標緩衝區 0x2000
E105: B5 10 MOV CH, 10h ; 計數 0x1000 bytes
E107: F3 A5 REP MOVSW ; 複製 0x1000 words (4KB) 從 DS:SI 到 ES:DI
E109: 8C C8 MOV AX, CS
E10B: 05 00 02 ADD AX, 0200h ; AX = CS + 0x200
E10E: 50 PUSH AX
E10F: 68 13 01 PUSH 0113h ; 返回位址
E112: CB RETF ; 遠端跳轉至 0x200:0113 (複製後的副本)
此段將自身複製至記憶體高位 0x2000:0000 並跳轉執行,典型的自我遷移/解殼技術。
E113: BE A1 01 MOV SI, 01A1h ; 資料區起始
E116: BF 00 01 MOV DI, 0100h ; 寫回目標
E119: 06 PUSH ES
E11A: 57 PUSH DI
E11B: B8 11 01 MOV AX, 0111h
E11E: BB 21 01 MOV BX, 0121h
E121: 89 37 MOV [BX], DI
E123: 4B DEC BX
E124: 4B DEC BX
E125: 48 DEC AX
E126: 79 F9 JNS 0121h ; 迴圈建立跳轉表/向量
...
後續包含大量位元運算、查表、轉換邏輯,推測為某種加密/解密演算法、壓縮解壓縮或圖形演示 (如著名的 4KB Demo)。
1.txt (每行格式: E100 33 F6 BF 00 20 ...)。DEBUG < 1.txt。G 執行,或 U 100 反組譯檢視。| 時代 | 特徵 |
|---|---|
| 機器碼手寫 | 極度依賴硬體、不可移植、難維護、錯誤難除錯 |
| 組合語言 | 助憶符號化、仍硬體綁定、大型專案管理困難 |
| 高階語言 (C/C++/Rust...) | 抽象層次高、可移植、豐富庫生態、現代編譯器優化超越手寫組語 |