Re: [問題] 請問如何 debug 一支 TSR 的 dos 程式?

看板Programming作者 (garyzyg)時間17年前 (2008/10/03 23:39), 編輯推噓3(306)
留言9則, 3人參與, 最新討論串5/5 (看更多)
※ 引述《ggg12345 (ggg)》之銘言: : ※ 引述《garyzyg (garyzyg)》之銘言: : : 標題: [問題] 請問如何 debug 一支 TSR 的 dos 程式? : : 某 dos 程式 A (沒源碼) 會 tsr. 小弟想對他常駐的部份做 debug, : : 請問要如何處置呢? : : 是先對 .exe/.com 作 disassemble 找到中斷, 再看 routine? : : -- : : ◆ 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 : 就要多費心. 和 keyboard/hotkey 有關, 似乎要靠腦袋 debug. 不過小弟想到一個好方法, 可以用 dosemu/dosbox 內建的 debugger. 程式在裡面執行 tsr 後 就可以 debugger 來 debug, 而不用太花腦袋了. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.92.142

10/04 11:12, , 1F
nice idea
10/04 11:12, 1F

10/04 11:13, , 2F
這是 DOS 時代做不到的 跟用 ICE 差不多
10/04 11:13, 2F

10/04 11:41, , 3F
當初在學校在Win98的DOS下面寫組語作業
10/04 11:41, 3F

10/04 11:41, , 4F
還可以邊聽MP3邊上網 看來組語還不夠底層
10/04 11:41, 4F

10/04 11:42, , 5F
原來我只是控制到那小小的DOS box而已
10/04 11:42, 5F

10/04 11:45, , 6F
debug程式如果自備另一套鍵盤與顯示幕跟
10/04 11:45, 6F

10/04 11:49, , 7F
被監測的TSR與環境的Key/display是隔離的
10/04 11:49, 7F

10/04 11:54, , 8F
就可以不混淆的進行debug動作.這種方法是
10/04 11:54, 8F

10/04 12:02, , 9F
用滑鼠切換.這類軟體都是v86虛擬機模式
10/04 12:02, 9F
文章代碼(AID): #18vZog3j (Programming)
討論串 (同標題文章)
文章代碼(AID): #18vZog3j (Programming)