1

我正在调试一个我没有源代码的第三方 DLL。此 DLL 维护一个字符串池。我想捕获这些字符串之一被传递给函数的最早出现......任何函数......

换句话说,我想检测具有某种格式的指向空终止字符串的指针何时被任何人推入堆栈......并且我想在发生这种情况时执行调试中断。

我知道您可以设置一个“访问中断”断点,该断点将在 CPU 读取/写入/执行特定地址时触发。我想要的是类似于这样:对于每个压入堆栈的字符串,我想针对某种格式对其进行测试,如果匹配,则执行中断。

使用 WinDbg、OllyDb、VS2008 等等……有什么想法吗?

谢谢!

4

1 回答 1

2

我会说这对您的要求是不可能的:

我想检测一个指向空终止字符串的指针何时具有某种格式

正如前面的答案所说,一旦断点命中,您就可以将字符串与任何内容匹配

我想捕获这些字符串之一被传递给函数的最早出现......任何函数......我想要的类似于:对于推入堆栈的每个字符串,我想对其进行测试某种格式,如果匹配,则执行中断。

因此,您需要的是检测何时使用堆栈上的特定指针参数调用任何函数 - 这是“不可能”的部分。理论上有多种方法可以做到这一点,但它们会很慢而且很复杂......如果函数获得一个指向具有您正在跟踪的值的指针的指针,或者包含该指针的数组......

你想达到什么目的?为什么你需要首先将字符串传递给函数的地方?字符串的使用是最重要的,正如您所知,您可以使用简单的内存访问断点来打破它(如果曾经复制过字符串,请添加另一个断点)。

我建议您采用另一种方法,使用反汇编程序并通过一些调试进行更多静态分析,以获得您需要的内容......

于 2008-12-19T14:12:54.733 回答