EmonPebsOverflowHandler

NTSTATUS __stdcall EmonPebsOverflowHandler(){
  __int64 v0; 
  __int64 **v1; 
  __int64 v2; 
  __int64 v3; 
  unsigned int v4; 
  unsigned __int64 v5; 
  __int64 v6; 

  LODWORD(v0) = KeGetPcr()->Prcb.Number;
  v1 = (__int64 **)*(&CmpDummyThreadEvent + 616);
  v2 = *(&CmpDummyThreadEvent + 614) + 160 * v0;
  while( v1 != (__int64 **)((char *)&CmpDummyThreadEvent + 4928) )
  {
    if( v1[3] )
    {
      if( *(&CmpDummyThreadEvent + 4920) )
      {
        v3 = *(_QWORD *)(v2 + 32);
        v4 = *(&CmpDummyThreadEvent + 1237);
        v5 = (*(_QWORD *)(v2 + 40) - v3) / (unsigned __int64)*(&CmpDummyThreadEvent + 1237);
      }
      else
      {
        v3 = *(unsigned int *)(v2 + 16);
        v4 = *(&CmpDummyThreadEvent + 1237);
        v5 = (unsigned int)(*(_DWORD *)(v2 + 20) - v3) / *(&CmpDummyThreadEvent + 1237);
      }
      ((void(__fastcall *)(__int64, _QWORD, unsigned __int64))v1[3])(v3, v4, v5);
      break;
    }
    v1 = (__int64 **)*v1;
  }
  if( *(&CmpDummyThreadEvent + 4920) )
  {
    v6 = *(_QWORD *)(v2 + 32);
    *(_QWORD *)(v2 + 40) = v6;
  }
  else
  {
    LODWORD(v6) = *(_DWORD *)(v2 + 16);
    *(_DWORD *)(v2 + 20) = v6;
  }
  return v6;
}

Referenced by:

EmonOverflowHandler