Example #1
0
        unsafe public int GetFieldValue(ulong moduleBase, uint typeId, string fieldName, ulong structureAddress, out ulong fieldValue)
        {
            int hr;

            fieldValue = 0;

            _EXT_TYPED_DATA symbolTypedData;

            symbolTypedData.Operation = _EXT_TDOP.EXT_TDOP_SET_FROM_TYPE_ID_AND_U64;

            symbolTypedData.InData.ModBase = moduleBase;
            symbolTypedData.InData.TypeId  = typeId;

            symbolTypedData.InData.Offset = structureAddress;

            if (FAILED(hr = Advanced.Request(DEBUG_REQUEST.EXT_TYPED_DATA_ANSI, &symbolTypedData, sizeof(_EXT_TYPED_DATA), &symbolTypedData, sizeof(_EXT_TYPED_DATA), null)))
            {
                return(hr);
            }

            IntPtr buffer = IntPtr.Zero;
            IntPtr memPtr = IntPtr.Zero;

            try {
                _EXT_TYPED_DATA temporaryTypedDataForBufferConstruction;

                memPtr = Marshal.StringToHGlobalAnsi(fieldName);
                int totalSize = sizeof(_EXT_TYPED_DATA) + fieldName.Length + 1;                 //+1 to account for the null terminator
                buffer = Marshal.AllocHGlobal(totalSize);

                temporaryTypedDataForBufferConstruction.Operation  = _EXT_TDOP.EXT_TDOP_GET_FIELD;
                temporaryTypedDataForBufferConstruction.InData     = symbolTypedData.OutData;
                temporaryTypedDataForBufferConstruction.InStrIndex = (uint)sizeof(_EXT_TYPED_DATA);
                Utilities.CopyMemory(buffer, (IntPtr)(&temporaryTypedDataForBufferConstruction), sizeof(_EXT_TYPED_DATA));
                Utilities.CopyMemory(buffer + sizeof(_EXT_TYPED_DATA), memPtr, fieldName.Length + 1);
                if (FAILED(hr = Advanced.Request(DEBUG_REQUEST.EXT_TYPED_DATA_ANSI, (void *)buffer, totalSize, (void *)buffer, totalSize, null)))
                {
                    return(hr);
                }

                var typedDataInClassForm = (_EXT_TYPED_DATA)Marshal.PtrToStructure(buffer, typeof(_EXT_TYPED_DATA));

                fieldValue = typedDataInClassForm.OutData.Data;
            }
            finally {
                Marshal.FreeHGlobal(buffer);
                Marshal.FreeHGlobal(memPtr);
            }

            return(S_OK);
        }
Example #2
0
        private _EXT_TYPED_DATA PerformRequest(_EXT_TYPED_DATA payload, byte[] additionalPayload)
        {
            var payloadBuffer = ToBytes(payload, additionalPayload);
            var resultBuffer  = new byte[Defaults.BufferSize * 50];
            int outSize;
            var hr = _advanced.Request(DEBUG_REQUEST.EXT_TYPED_DATA_ANSI, payloadBuffer, payloadBuffer.Length, resultBuffer, Defaults.BufferSize * 50, out outSize);

            return(FromBytes(resultBuffer));
        }
Example #3
0
        /// <summary>
        /// Requests the specified request type.
        /// </summary>
        /// <param name="client">The DbgEng.dll Advanced interface.</param>
        /// <param name="requestType">Type of the request.</param>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        public static EXT_TYPED_DATA Request(this IDebugAdvanced3 client, DebugRequest requestType, EXT_TYPED_DATA request)
        {
            using (var requestNative = new MarshalStructure <EXT_TYPED_DATA>())
            {
                uint outSize;

                requestNative.Structure = request;
                client.Request(requestType, requestNative.Pointer, requestNative.USize, requestNative.Pointer, requestNative.USize, out outSize);
                return(requestNative.Structure);
            }
        }
Example #4
0
        /// <summary>
        /// Requests the specified request type with extended structure.
        /// </summary>
        /// <param name="client">The DbgEng.dll Advanced interface.</param>
        /// <param name="requestType">Type of the request.</param>
        /// <param name="request">The request.</param>
        /// <param name="extended">The extended string.</param>
        public static EXT_TYPED_DATA RequestExtended(this IDebugAdvanced3 client, DebugRequest requestType, EXT_TYPED_DATA request, string extended)
        {
            using (var requestNative = new MarshalStructureExtendedWithAnsiString <EXT_TYPED_DATA>())
            {
                uint outSize;

                requestNative.Extended  = extended;
                requestNative.Structure = request;
                client.Request(requestType, requestNative.Pointer, requestNative.USize, requestNative.Pointer, requestNative.USize, out outSize);
                return(requestNative.Structure);
            }
        }