作者garyzyg (garyzyg)
看板Programming
标题Re: [问题] 请问如何 debug 一支 TSR 的 dos 程式?
时间Fri Oct 3 23:39:21 2008
※ 引述《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
1F:推 Chevelle:nice idea 140.112.5.10 10/04 11:12
2F:→ Chevelle:这是 DOS 时代做不到的 跟用 ICE 差不多 140.112.5.10 10/04 11:13
3F:推 meltice:当初在学校在Win98的DOS下面写组语作业 117.19.66.224 10/04 11:41
4F:→ meltice:还可以边听MP3边上网 看来组语还不够底层 117.19.66.224 10/04 11:41
5F:→ meltice:原来我只是控制到那小小的DOS box而已 117.19.66.224 10/04 11:42
6F:推 ggg12345:debug程式如果自备另一套键盘与显示幕跟 140.115.4.12 10/04 11:45
7F:→ ggg12345:被监测的TSR与环境的Key/display是隔离的 140.115.4.12 10/04 11:49
8F:→ ggg12345:就可以不混淆的进行debug动作.这种方法是 140.115.4.12 10/04 11:54
9F:→ ggg12345:用滑鼠切换.这类软体都是v86虚拟机模式 140.115.4.12 10/04 12:02