作者ggg12345 (ggg)
看板Programming
标题Re: [问题] 请问如何 debug 一支 TSR 的 dos 程式?
时间Thu Oct 2 10:22:43 2008
※ 引述《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