示例#1
0
void SeniorVMHandle::r_get_mem(
                                  long _register_index,
                                  long _register_base,
                                  long _scale,
                                  long _lval)
{
  //_lval += 0x20;
  char sn = 0;
  for (int i = 0; i < 32; i++)
  {
    if (_scale == 1<<i)
    {
      sn = i;
      break;
    }
  }
  if (_register_index || _register_base || _scale || _lval)
  {
    //d_add(_register_index,_register_base);
    d_shl(_register_base,sn);
    pop(T_INVALID);
    pop(T_TMP_REGISTER5);
    d_add(_register_index,T_TMP_REGISTER5);
    pop(T_INVALID);
    pop(T_TMP_REGISTER5);
    d_push_imm(_lval);
    pop(T_TMP_REGISTER4);
    d_add(T_TMP_REGISTER5,T_TMP_REGISTER4);
    pop(T_INVALID);
  } else if (_register_index || _register_base || _lval)
  {
    
  } else if (_register_index || _scale || _lval)
  {
    
  } else if (_register_index || _register_base)
  {
    d_add(_register_index,_register_base);
    pop(T_INVALID);
  } else if (_register_base || _lval)
  {
    d_push_imm(_lval);
    pop(T_TMP_REGISTER4);
    d_add(_register_base,T_TMP_REGISTER4);
    pop(T_INVALID);
  } else if (_register_index || _lval)
  {
    d_push_imm(_lval);
    pop(T_TMP_REGISTER4);
    d_add(_register_index,T_TMP_REGISTER4);
    pop(T_INVALID);
  } else if (_register_index)
  {
    push(_register_index);
  } else if (_register_base)
  {
    
  }
}
示例#2
0
void SeniorVMHandle::r_get_mem(
                                  long _register_base,
                                  long _register_index,
                                  long _scale,
                                  long _lval)
{
  if (_register_base == T_NSP)
  {
    db( GET_HANDLE( push_esp ) );
    pop( T_ESP );
  }
  d_push_imm( _lval );
  pop( T_TMP_REGISTER4 );
  if ( _register_index ) {
    char sn = 0;
    for (int i = 0; i < 32; i++)
    {
      if (_scale == 1<<i)
      {
        sn = i;
        break;
      }
    }
    d_shl( _register_index,sn );
    pop( T_INVALID );
    pop( T_TMP_REGISTER5 );
    d_add(T_TMP_REGISTER4,T_TMP_REGISTER5  );
    pop( T_INVALID );
    pop( T_TMP_REGISTER4 );
  }
  if (_register_base)
  {
    d_add( _register_base,T_TMP_REGISTER4 );
    pop( T_INVALID );
  }
}