2011-12-15 26 views
2

好吧,这是一个复杂的问题,我一直试图在过去4个月内在相当大的代码库中查找一个错误,只发生在valgrind不可用的平台上。查找所有类/结构的所有成员从类/结构的起始处偏移了N个字节?

发生了什么是一个单字节0x01正在写入一个奇怪的地方(随机发生,但它似乎总是写在一小堆可能的地方,不管调试/释放或哪个编译器被使用)。我发现错误字节始终离开它破坏的对象的起始位置80个字节。

无论如何,有什么工具或技巧或Visual Studio的插件,可以扫描整个代码库,并列出所有成员的80字节偏离他们的类的开始?

+0

它不一定是80字节偏移量的成员。它可能很容易(也可能是)写入该字节的缓冲区溢出。想想`struct foo {char arr [10]; void bar(){arr [80] = 1; }};`。 – Xeo 2011-12-15 00:38:05

+0

它的80个字节从一个类的开始不是从一个数组的开始,如果它是一个数组溢出或堆栈溢出,我期望损坏的字节前后的字节也是破坏的 – TylerGlaiel 2011-12-15 00:46:51

回答

0

如果它总是处于一致的地方,即在结构的特定实例中,则可以在该实例已初始化后放置一个断点,然后在内存发生更改时触发的特定地址设置断点我忘记了VS中那些断点的实际名称)。

这是一个非常方便的技术,用于发现写入到它不应该的位置的难以捉摸的扭曲操作!