Ejemplo n.º 1
0
        public override object GetArgumentValue(DkmStackWalkFrame frame, int index)
        {
            byte[] argumentBuffer = ReadArgumentBytes(frame);

            int wordZeroIndex = 0;

            for (int i = 0; i < index; ++i)
            {
                wordZeroIndex += _parameters[i].GetPaddedSize(WordSize);
            }
            FunctionParameter requestedParameter = _parameters[index];
            int requestedParamSize = requestedParameter.GetSize(WordSize);

            byte[] result = new byte[requestedParamSize];

            Array.ConstrainedCopy(argumentBuffer, wordZeroIndex, result, 0, requestedParamSize);

            switch (requestedParamSize)
            {
            case 4:
                return(BitConverter.ToUInt32(result, 0));

            case 8:
                return(BitConverter.ToUInt64(result, 0));

            default:
                return(result);
            }
        }