如何在参考上设置数据断点

时间:2018-08-09 21:30:09

标签: c++ visual-c++

我有一个对象的64位引用,其中引用的低32位被0xFFFFFFFF覆盖。我无法弄清楚如何在引用本身的字节上设置数据断点,因为监视窗口使我无法获取引用的地址。

2 个答案:

答案 0 :(得分:1)

我看到了两种解决方案(如果我正确理解了这个问题):

  • 将引用更改为指针;
  • 在引用的前面添加一个虚拟变量-请参见下面的代码-并将断点设置为其地址。

class object_t
{
public:
  int i;
};

class test_t
{
public:
  int64_t dummy {};
  object_t& ro;
  test_t( object_t& aro ) : ro { aro } {}
};

int main()
{
  object_t obj;
  test_t c { obj };

  // without dummy
  int64_t* p = (int64_t*)&c;
  *(int32_t*)p = 0xffffffff; // simulates memory corruption
  c.ro.i = 0; // exception

  // with dummy
  int64_t* p = (int64_t*)&c;
  *(int32_t*)p = 0xffffffff; // will break 

  return 0;
}

答案 1 :(得分:0)

我不知道直接执行此操作的任何方法。但是,这是一个可能的解决方案:

  • 首先,找到变量的大致位置:如果在变量旁边有一个变量,则获取其地址。如果附近没有变量,那么如果引用在堆栈上,则获取堆栈指针(x86上的esp / rsp)。如果引用在不在堆栈中的对象中,则使用this指针。
  • 第二,使用内存窗口,转到该大概地址,然后搜索引用的值,该值将在附近。