我正在debugging我没有源代码的第三方DLL。 该DLL维护一个string池。 我想捕捉这些string之一传入函数的最早发生…任何函数…
换句话说,我想要检测什么时候将具有特定格式的指针指向一个空终止的string被压入堆栈…被任何人发现,并且当这种情况发生时我想执行一个debugging中断。
我知道你可以设置一个“break-on-access”断点,当CPU读/写/执行一个特定的地址的时候会触发这个断点。 我想要的是类似于这个:对于每个string推入堆栈,我想testing一个特定的格式,如果匹配,执行中断。
使用WinDbg,OllyDb,VS2008,任何..任何想法?
谢谢!
我会说,这是不可能的与您的要求:
我想检测什么时候有一个特定格式的指针到一个null终止字符串
正如前面的答案所说,一旦断点击中,你就可以将你的字符串与任何东西进行匹配
我想捕获这些字符串之一传入函数的最早发生…任何函数…我想要的是类似于这个:对于每个字符串推入堆栈,我想测试它反对一定的格式,如果匹配,执行中断。
所以你需要的是检测什么时候在堆栈上调用一个特定的指针参数来调用函数 – 这是“不可能的”部分。 从理论上讲,有多种方法可以做到这一点,但是它们会变慢并且变得复杂…而且,如果函数获得了一个指向具有要跟踪的值的指针或包含该指针的数组的指针,那该怎么办?
你试图达到什么目的? 为什么你需要这个字符串首先被传入一个函数的地方? 字符串的使用是最重要的,正如你所知道的那样,你可以用一个简单的内存访问断点来断开它(如果字符串被拷贝了,就添加另一个断点)。
我建议你采取另一种方法,使用反汇编,并做一些更多的静态分析调试,以得到你所需要的…
用WinDBG,看看这篇文章