首页 > 解决方案 > 汇编调试器如何操作寄存器?

问题描述

调试器如何操作工作 CPU 上的寄存器?

我正在使用 nasm 和 afd 和 dosbox(不知道也不能使用任何替代设置,因为我的大学需要这个设置)。运行win 10。对装配来说真的很新。阅读此线程 ,但一切都超出了我的想象。所以请像我 5 岁一样解释一下。也许是对初学者的一些参考

标签: debuggingassemblydosbox

解决方案


DOSBOX 内置的调试器很简单:它有一个旁通道来访问整个机器状态。

在多任务操作系统下,有像 Linuxptrace这样的系统调用可以操纵另一个进程的状态。

在 DOS 下,调试器必须将自己插入到与被调试程序不同的内存区域中。x86 ISA 本身具有调试功能,例如 FLAGS(跟踪标志)中的 TF 用于单步执行。

一旦调试器控制了 CPU(即 CPU 正在执行调试器代码),它就可以将寄存器的旧值保存在某处(在堆栈上或静态位置)。

它可以将它们全部恢复(使用指令)并通过使用从内存加载 CS:IP 和 FLAGSmov的方法返回到正在调试的程序。iretSS:SP 必须对其有效(返回信息将在SS:SP被调试进程的正下方)。所以实模式 DOS 调试是“侵入性的”,并且会破坏 SS:SP 以下的空间。与具有虚拟内存的多任务操作系统不同。

不使用任何寄存器(即在恢复所有内容之后)返回正在调试的进程的另一种方法是far jmp cs:[mem]使用绝对寻址模式。但这无法恢复 FLAGS,因此如果您想在恢复执行正在调试的进程时设置 TF,它将无法正常工作。


推荐阅读