代码之家  ›  专栏  ›  技术社区  ›  user2189331

x86:在堆栈上推送特定的字符串指针时是否可以调试中断?

  •  1
  • user2189331  · 技术社区  · 16 年前

    我正在调试没有源代码的第三方DLL。这个DLL维护一个字符串池。我想捕获最早出现的情况,在这种情况下,这些字符串中的一个被传递到一个函数…任何函数都是如此…

    换言之,我想检测具有某种格式的指向空终止的字符串指针何时被任何人推到堆栈上……并且我想在出现这种情况时执行调试中断。

    我知道你可以设置一个“访问中断”断点,当CPU读/写/执行一个特定的地址时,它会触发。我想要的与此类似:对于推送到堆栈上的每个字符串,我想用特定的格式测试它,如果它匹配,就执行中断。

    使用windbg、ollydb、vs2008等等……有什么想法吗?

    谢谢!

    2 回复  |  直到 15 年前
        1
  •  2
  •   Hrvoje PrgeÅ¡a    16 年前

    我想说这不可能满足你的要求:

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

    正如前面的回答所说,一旦 断点命中数

    我想捕获最早出现的情况,在这种情况下,这些字符串中的一个被传递到一个函数…任何函数都是如此… 我想要的与此类似:对于推送到堆栈上的每个字符串,我想用特定的格式测试它,如果它匹配,就执行中断。

    所以您需要的是检测什么时候用堆栈上的特定指针参数调用任何函数——这是“不可能”的部分。理论上,有多种方法可以做到这一点,但它们是缓慢和复杂的…如果函数得到一个指针,指向一个具有您要跟踪的值的指针,或者一个包含该指针的数组,该怎么办?

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

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

        2
  •  1
  •   Cory Foy    16 年前

    使用windbg,查看 this article