汇编调试器如何操作寄存器?

时间:2018-11-24 15:13:43

标签: debugging assembly dosbox

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

我正在将nasm和afd与dosbox一起使用(不知道并且不能使用任何替代设置,因为我的大学要求此设置)。跑赢10。 组装真的很新。阅读this thread 但是一切都超过了我。所以请像我5岁时解释一下。也许对初学者有一些参考

1 个答案:

答案 0 :(得分:1)

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

在多任务操作系统下,存在诸如Linux ptrace之类的系统调用,它们可以操纵另一个进程的状态。

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

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

它可以全部还原它们(使用mov指令),并通过使用iret返回正在调试的程序,该SS:SP从内存中加载CS:IP和FLAGS。 SS:SP必须有效才能正常工作(返回信息将在被调试进程的far jmp cs:[mem]下方)。因此,实模式DOS调试是“侵入式”的,并且会破坏SS:SP下的空间。与带有虚拟内存的多任务操作系统不同。

不使用任何寄存器(即在还原所有内容之后)返回正在调试的进程的另一种方法是使用绝对寻址模式的passport.authenticate。但这无法还原FLAGS,因此,如果您想在继续执行要调试的进程时设置TF,就无法使用。