※ 引述《garyzyg (garyzyg)》之銘言:
: 標題: [問題] 請問如何 debug 一支 TSR 的 dos 程式?
:
: 某 dos 程式 A (沒源碼) 會 tsr. 小弟想對他常駐的部份做 debug,
: 請問要如何處置呢?
:
: 是先對 .exe/.com 作 disassemble 找到中斷, 再看 routine?
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 61.228.83.19
: 推 Chevelle:看它如何常駐.. how about just bpint 1c 140.112.5.10 10/01 23:25
: → garyzyg:bpint ah=25 21 那 routine 那部份要如何 61.228.83.19 10/01 23:34
: → garyzyg:debug 呢? 用眼睛看, 還是有 debug 可跑? 61.228.83.19 10/01 23:35
: → garyzyg:應該是 bpint 21 ah=25 61.228.83.19 10/01 23:36
DOS 時代的 TSR(Terminate & Stay Resident) 就是跟 OS一樣的
常駐型程式, 執行完時還會請求 OS 認可, 可以繼續佔用某段記憶
體, 其他程式可以呼叫此段程式使之被執行. 呼叫方式通常經過
interrupt/trap 的 int n 進行, 因此常常是某一個 ISR (Interrupt
Service Routine)的一部份, 也就是進行常駐時可能是替代原來的 ISR
或者與原來的 ISR linking & binding , 其形式不外是 switch 式的
並接或者就是按序串接. 這類程式的架構與模組在 DOS 下有固定模式.
WinXX 底下的 DOS prompt 有一個很老很老的程式就叫 debug.com
或 debug.exe 不只會做 disassemble(但限 8086 mode), 還會做 single
step 與 break-point trace .
程式建立 TSR 前會完成 TSR binding 動作, 知道叫用點(int xx 內
的 branch call) 就能知道整段 TSR 的程式所在, TSR 通常都很短,
disasm 就能完整看完. 如果 TSR 是跟 keybord i/o 有關, trace/break
就要多費心.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.4.12