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)); }
private static _EXT_TYPED_DATA FromBytes(byte[] data) { _EXT_TYPED_DATA result = default(_EXT_TYPED_DATA); int size = Marshal.SizeOf(result); IntPtr pointer = Marshal.AllocHGlobal(size); Marshal.Copy(data, 0, pointer, size); result = (_EXT_TYPED_DATA)Marshal.PtrToStructure(pointer, result.GetType()); Marshal.FreeHGlobal(pointer); return(result); }
private static byte[] ToBytes(_EXT_TYPED_DATA data, byte[] additional) { int size = Marshal.SizeOf(data); byte[] result = new byte[size]; IntPtr pointer = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(data, pointer, true); Marshal.Copy(pointer, result, 0, size); Marshal.FreeHGlobal(pointer); if (additional.Length == 0) { return(result); } return(CombineArrays(additional, result)); }
public _DEBUG_TYPED_DATA CreateTypedData(ulong modBase, ulong offset, uint typeId) { _EXT_TYPED_DATA result = default(_EXT_TYPED_DATA); result.Operation = _EXT_TDOP.EXT_TDOP_SET_FROM_TYPE_ID_AND_U64; result.Flags = 0; // Virtual Memory result.InData = new _DEBUG_TYPED_DATA() { ModBase = modBase, Offset = offset, TypeId = typeId, }; // will be populated result.OutData = default(_DEBUG_TYPED_DATA); result.Status = 0; var response = PerformRequest(result, Defaults.NoPayload); return(response.OutData); }