gpt4 book ai didi

exception - Ollydbg 调试 - 将异常传递给应用程序/进入指令

转载 作者:行者123 更新时间:2023-12-05 05:24:30 31 4
gpt4 key购买 nike

我正在尝试识别程序(32 位)中可能导致代码执行的错误。到目前为止,我使用 ollydbg 调试了应用程序并运行了我的漏洞利用代码。然后 ollydbg 给了我一个异常(exception)。

  • 如果我按下“Ctrl+F9”,我的 shellcode 似乎没有任何执行
  • 相比之下,当异常发生时,我使用“F8”单步执行下一条指令,我终于到达了我的 shellcode 并且它被执行了
  • 如果我在没有 ollydbg 的情况下运行应用程序,我的 shellcode 也不会被执行

为什么我的 shellcode 在我执行下一条指令时执行,否则不执行?当我在没有调试器的情况下运行我的应用程序时,正常情况是什么?

非常感谢!

最佳答案

当线程中出现异常时,系统将首先检查是否附加了调试器。

如果附加了调试器,异常将报告给调试器(而不是错误的进程或线程)。在 ollydbg(和大多数调试器)中,您可以选择对该异常执行某些操作。

第一个是将该异常传递给 ollydbg 中的错误线程 (CTRL+F9)。

系统将查看当前线程的 EXCEPTION_REGISTRATION_RECORD 并遍历 EXCEPTION_REGISTRATION 结构列表(这些结构中的每一个都有一个异常处理程序)并检查是否有一个处理程序可以处理异常。

  • 如果处理程序可以处理异常,则堆栈展开(到某个点)并且线程可能会继续其生命。

  • 如果没有处理程序可以处理该异常,则调用最终处理程序并且程序崩溃(系统随后通常会显示一个对话框,通知用户进程已崩溃)。

这与没有附加调试器的情况完全相同。

因此,在您的情况下,将异常传递给调试器可能会展开堆栈,并且线程将在异常位置之后继续执行(或者如果无法处理异常则简单地使整个应用程序崩溃) .

第二个选项 - 当附加调试器时 - 是将异常传递给故障线程(使用步骤 [into | over]/run 按钮之一)。在这种情况下,系统将不会搜索任何处理程序,并且线程将简单地重新抛出异常(如果它不能通过它)或继续执行,就像什么也没发生一样(如果调试器知道如何处理它)。

您应该检查引发了哪种类型的异常(很可能是以下一种:读取/写入中的访问冲突;断点异常)并更正问题(请参阅 ollydbg 窗口的底部,它会告诉您哪种异常已经提出)如果你想毫无问题地执行你的shellcode。

关于exception - Ollydbg 调试 - 将异常传递给应用程序/进入指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34250409/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com