x86的哪些功能(如果有的话)允许用户模式程序知道它正在被调试



我似乎记得以前听说x86程序可以检测它是否正在调试。这与恶意软件分析有关。

然而,在研究寄存器时,我阅读了DR,发现了以下声明:

调试寄存器是特权资源;MOV指令访问它们只能在零特权级别执行。一在任何情况下执行时尝试读取或写入调试寄存器其他特权级别会导致一般保护故障。

那么,有人能解释一下x86中是否有一些替代功能可以让程序意识到它正在被调试吗?我记得我读过一些关于调试器的文章,实际上是把东西补丁到程序的指令内存中,但我还不确定(我还没有时间研究调试器的内部工作原理(。

有人能澄清一下x86是否有一个基本功能会泄露信息,暗示调试器与程序的连接吗?或者这可能只是由于更具侵入性的调试器可能正在做的事情?

否,x86体系结构中没有内置机制,允许程序检测是否正在调试,但有许多启发式方法允许您确定是否可能正在调试,例如

  • 检查CCD_ 2中的CCD_
  • 检查rdtsc差异(显然通常不合适(,或
  • 检查陷阱标志

但这些方法并非绝对正确。最终,您的程序可能甚至没有在裸机x86处理器上运行。

最新更新