【问题标题】:How does a debugger set breakpoints if the image is in read-only memory?如果图像在只读内存中,调试器如何设置断点?
【发布时间】:2013-04-06 20:13:13
【问题描述】:

如果图像在只读内存中,调试器如何设置断点?我知道有硬件断点,但在我使用的调试器 (OllyDbg) 中,必须使用与普通断点不同的对话框专门设置这些断点。

解释:

这是调试器中的一个例程,它将自身与自身的副本进行比较。 EDX 指向正在运行的镜像,EBX 指向镜像的已知良好副本。只有在不匹配的情况下才会到达 4010CE 上的断点。被比较的字符在 AL 寄存器中。如您所见,调试器在 10CE 显示 EB F6,但这是错误的。正如您通过查看 AL 寄存器可以看到的那样,10CE 实际上有 CC。这是因为调试器偷偷插入了CC来执行断点。

【问题讨论】:

    标签: debugging memory assembly operating-system ollydbg


    【解决方案1】:

    调试器首先必须更改它要写入的页面的内存保护。这可以通过 VirtualProtectEx 来完成。之后,它可以使用 WriteProcessMemory 进行写入,然后将保护设置回原始值。

    【讨论】:

      【解决方案2】:

      让我先声明一下,我不熟悉您的特定工具集。

      如果您尚未启用硬件断点,则唯一剩余的断点类型是软件断点。当您用陷阱指令替换指令的第一个字节时,这些只会被命中(在 x86 上,因为这是我最熟悉的),并且只有在 正确 使用了您的操作系统的陷阱指令,并且调试器已经将自己注册到操作系统作为此进程的调试器。为了使软件断点在正确的时刻发生,陷阱指令必须在正确指令的第一个字节上写入代码段。

      这里得到的两个答案首先解释了可以让你到达这里的两个场景(至少,我能想到的唯一两个):

      • 内核总是在任何地方都有写访问权限,除了受硬件保护的页面(即在某种 ROM 上),您的进程的内存几乎肯定没有。它有能力编写断点指令,而不管暴露给被调试的用户进程的权限。

      • 在插入断点之前,调试器必须使用一些系统调用来改变目标进程的内存访问权限。

      就我个人而言,我猜第一件事正在发生。段权限仅用于保护您的目标进程不受其自身的影响,而不是来自调试器进程或内核的保护。操作系统中的调试机制经常违反“正常”权限,以允许调试器对目标进程执行任何操作。当然,这就是为什么某些操作系统要求您输入密码才能在某些情况下使用调试器的原因。

      但是,您可以通过在设置断点后尝试从目标进程内部写入代码段来测试它是否是第二个。如果写入成功,您就知道操作系统已经降低了权限(以允许调试进程)。对于操作系统来说,要求调试器跳过这个循环会很尴尬,因为它已经可以将任意代码插入内存的可写部分,然后通过生成堆栈帧溢出来强制跳转到它。

      【讨论】:

      • OllyDbg 是一个用户模式调试器,所以绝对不是案例 1。我知道我可以编写一堆实验代码来弄清楚发生了什么,但我认为提供赏金会更容易并引起这些问题专家的注意。
      • 除非你在做内核开发,否则调试器总是在用户模式下运行。但是,它们仍然可以通过系统调用向内核发出请求。我的意思是其中一个系统调用会告诉内核修改被调试进程的内存。内核可以不受限制地访问内存,所以这对它来说没有问题。
      • 另外,我不认为自己是专家,但我确实为 Solaris 开发了两个类似调试器的工具(DTrace 和 mdb)。 mdb 使用我建议的机制。 DTrace 的机制有点不同,因为它是在内核中运行的服务,但它也不是普通的用户模式调试器。
      【解决方案3】:

      调试器利用 WriteProcessMemory() 函数来改变指令。它将保留一份说明。当 bp 被击中时,它将重置旧的字节值并将 EIP 设置回之前的指令,以便真正的指令可以执行。

      【讨论】:

      • WriteProcessMemory 发生在内核中,如果我没记错的话。
      • 尝试在 ReadOnly 段上使用 WriteProcessMemory 将导致访问冲突。
      猜你喜欢
      • 1970-01-01
      • 2012-04-06
      • 2012-04-15
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      相关资源
      最近更新 更多