无法跟踪 MS-DOS COM 文件

逆向工程 调试器 DOS-COM
2021-06-12 03:57:56

在MS-DOS中调试以下com文件时,我可以成功运行程序-g并正常终止,但是当我跟踪它时-t 1000,程序抛出非法操作异常并在+/- 800条指令后终止。我手动跟踪了该文件,但我看不出它为什么会中止(它确实将一些数据写入较低的内存区域,但这不应该影响调试器)。

可以在此处找到 COM 文件

MS Debug 和 Freedos 都DEBUG.exe给出了相同的结果(尽管它们在执行的不同点崩溃)。WinXP 虚拟 x86 环境和 dosbox 都给出了相同的结果。

关于为什么会这样的任何想法?

编辑:可以在此pastebin 中找到跟踪

该跟踪是通过使用这些软件运行 FreeDOS 调试器的 Dosbox 进行的

我查看了调试器中的 MASM 代码:通常不应将 INT3 用于单步跟踪。还要注意所有寄存器和标志都搞砸了。

1个回答

这些说明:

6401.AX=0000 BX=0811 CX=0004 DX=0000 SP=FFF8 BP=0000 SI=8020 DI=8000
6402.DS=F800 ES=F800 SS=06F1 CS=0811 IP=051F NV UP EI PL ZR NA PE NC
6403.0811:051F F3AB              REP     STOSW
6404.AX=0000 BX=0811 CX=0003 DX=0000 SP=FFF8 BP=0000 SI=8020 DI=8002
6405.DS=F800 ES=F800 SS=06F1 CS=0811 IP=051F NV UP EI PL ZR NA PE NC
6406.0811:051F F3AB              REP     STOSW
6407.AX=0000 BX=0811 CX=0002 DX=0000 SP=FFF8 BP=0000 SI=8020 DI=8004
6408.DS=F800 ES=F800 SS=06F1 CS=0811 IP=051F NV UP EI PL ZR NA PE NC
6409.0811:051F F3AB              REP     STOSW

正在覆盖中断表 - 特别是中断 0 并打算写入中断 1。跟踪使用中断 1,因此它正在中断该写入。在最后一个 REP 完成之后发生的下一条跟踪指令将使用部分覆盖的新地址而不是调试器的地址来触发中断。那时的影响是完全不可预测的。你不能自动追踪这个。这将需要您的一些互动。