예제 #1
0
 /// <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);
     }
 }
예제 #2
0
        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);
                }
            }
        }