我正在OllyDbg中调试应用程序,将程序在特定位置暂停。现在,从堆栈来看,我深入了解ntdll和其他与gui相关的模块调用。我想在应用程序返回到指定(主)模块内的任何功能后立即中断。有断点条件吗?我怎样才能做到这一点?

#1 楼

转到Ollydbg中的内存窗口。找到您要在返回时中断的模块的代码部分(通常是.text)。右键单击“内存”部分,然后设置“按次访问”或按F2。一旦执行到达该内存,您就会中断。您还可以将内存访问权限更改为只读,并且当执行到达该内存段时,您将获得异常。 ,要执行此操作,只需转到调试,设置条件(Ctrl + T)即可设置条件。然后使用“调试,跟踪到(Ctrl + F11)”或“调试,跟踪结束”(Ctrl + F12)开始跟踪。即使调用是间接的,这也将使您能够看到您的来源。第一次执行。您也可能通过导入,对象vtables或其他某种机制触发调用。您需要研究突破时的状态。

评论


我从没想过我可以在整个内存部分设置中断“点”……哇。

–多米尼克·安塔尔(Dominik Antal)
2014年1月8日在8:48

我没有详细研究该机制,但是如果我正在编写调试器,则解决该问题的方法是将整个内存区域设置为无访问权限,然后在尝试访问它时调试器会捕获异常。这样,您将获得某种内存区域断点。我不确定OllyDbg如何实现它。

–彼得·安德森(Peter Andersson)
2014年1月8日在8:54

有关。

–多米尼克·安塔尔(Dominik Antal)
2014年1月8日在9:52

您如何在内存中“查找代码段”?如何确定程序在内存中的加载位置?编辑:我刚刚意识到,如果您扩展内存部分,就可以轻松找到它,谢谢。

–卷
16年7月9日在7:34



#2 楼

在正常情况下,alt+f9 execute till user code应该会让您回到用户代码