/// <summary> 更新线程运行的更新方法 </summary> private void Update() { _pause_old = 0; _pause_new = 0; // 存活时运行循环 while (updateactive) { // 更新所有变量模型 foreach (SimulateVariableModel svmodel in Variables) { svmodel.Update(dllmodel); } // 更新所有未锁定的变量单元 foreach (List <SimulateVariableUnit> svulist in udict.Values) { foreach (SimulateVariableUnit svunit in svulist) { svunit.Update(dllmodel); } } // 更新所有已锁定的变量单元 foreach (List <SimulateVariableUnit> svulist in ldict.Values) { foreach (SimulateVariableUnit svunit in svulist) { svunit.Set(dllmodel); } } // 若检查到暂停状态的改变则进行处理 _pause_new = SimulateDllModel.GetBPPause(); isbppause = (_pause_new > 0); if (_pause_old == 0 && _pause_new > 0) { if (SimulateDllModel.GetCallCount() > 256) { bpstatus = BreakpointStatus.SOF; } OnBreakpointPause(new BreakpointPauseEventArgs( SimulateDllModel.GetBPAddr(), bpstatus)); } if (_pause_old > 0 && _pause_new == 0) { OnBreakpointResume(new BreakpointPauseEventArgs( SimulateDllModel.GetBPAddr(), bpstatus)); } _pause_old = _pause_new; // 测试dll系统栈的访问 //TestRBP(); // 等待 Thread.Sleep(50); } }
unsafe private void TestRBP() { int call = SimulateDllModel.GetCallCount(); void *rbp = SimulateDllModel.GetRBP(); byte[] data = new byte[64]; if ((int)(rbp) > 0x08) { for (int i = 0; i < data.Length; i++) { data[i] = *(((byte *)(rbp)) + i - 32); } } }