/// <summary> /// Gets the superset chunk. /// </summary> /// <param name="context">The context.</param> /// <param name="lowString">The low string.</param> /// <param name="highString">The high string.</param> /// <returns>MemoryChunkEntity.</returns> internal static MemoryChunkEntity GetSupersetChunk(IMcFlyContext context, string lowString, string highString) { var superset = context.MemoryChunkEntities.FirstOrDefault(e => string.CompareOrdinal(e.LowAddress, lowString) <= 0 && string.CompareOrdinal(e.HighAddress, highString) >= 0); return(superset); }
/// <summary> /// Gets the appended chunks. /// </summary> /// <param name="context">The context.</param> /// <param name="lowString">The low string.</param> /// <param name="highString">The high string.</param> /// <returns>List<MemoryChunkEntity>.</returns> internal static List <MemoryChunkEntity> GetAppendedChunks(IMcFlyContext context, string lowString, string highString) { var appended = (from e in context.MemoryChunkEntities where string.CompareOrdinal(e.LowAddress, lowString) <= 0 && string.CompareOrdinal(highString, e.HighAddress) >= 0 select e).ToList(); return(appended); }
/// <summary> /// Convert an entity to a domain object. /// </summary> /// <param name="entity">The entity.</param> /// <param name="context">The context.</param> /// <returns>The corresponding domain object for the provided entity</returns> /// <inheritdoc /> public Tag ToDomain(TagEntity entity, IMcFlyContext context) { return(new Tag { Body = entity.Body, Title = entity.Title, CreateDateUtc = entity.CreateDateUtc, Id = entity.Id }); }
/// <summary> /// Convert a domain object to an entity /// </summary> /// <param name="domainObject">The domain object.</param> /// <param name="context">The context.</param> /// <returns>The corresponding database entity for the provided domain object</returns> /// <inheritdoc /> public TagEntity ToEntity(Tag domainObject, IMcFlyContext context) { var first = context.TagEntities.FirstOrDefault(t => t.Id == domainObject.Id); if (first != null) { return(first); } var newTag = context.TagEntities.Create(); newTag.Body = domainObject.Body; newTag.Title = domainObject.Title; newTag.CreateDateUtc = domainObject.CreateDateUtc; return(newTag); }
/// <summary> /// Withes the context. /// </summary> /// <param name="context">The context.</param> /// <returns>ContextFactoryBuilder.</returns> public ContextFactoryBuilder WithContext(IMcFlyContext context) { Mock.Setup(factory => factory.GetContext(It.IsAny <string>())).Returns(context); return(this); }
/// <summary> /// Convert a frame entity to a frame domain object. /// </summary> /// <param name="entity">The entity.</param> /// <param name="context">The context.</param> /// <returns>The corresponding domain object for the provided entity</returns> /// <inheritdoc /> public Frame ToDomain(FrameEntity entity, IMcFlyContext context) { var frame = new Frame(); frame.Position = new Position(entity.PosHi, entity.PosLo); frame.ThreadId = entity.ThreadId; frame.DisassemblyLine = ExtractDisassemblyLine(entity); frame.StackTrace = ExtractStackTrace(entity); frame.RegisterSet = new RegisterSet(); frame.RegisterSet.Brfrom = entity.Brfrom?.ToULong(); frame.RegisterSet.Brto = entity.Brto?.ToULong(); frame.RegisterSet.Cs = entity.Cs?.ToUShort(); frame.RegisterSet.Dr0 = entity.Dr0?.ToULong(); frame.RegisterSet.Dr1 = entity.Dr1?.ToULong(); frame.RegisterSet.Dr2 = entity.Dr2?.ToULong(); frame.RegisterSet.Dr3 = entity.Dr3?.ToULong(); frame.RegisterSet.Dr6 = entity.Dr6?.ToULong(); frame.RegisterSet.Dr7 = entity.Dr7?.ToULong(); frame.RegisterSet.Ds = entity.Ds?.ToUShort(); frame.RegisterSet.Efl = entity.Efl?.ToUInt(); frame.RegisterSet.Es = entity.Es?.ToUShort(); frame.RegisterSet.Exfrom = entity.Exfrom?.ToULong(); frame.RegisterSet.Exto = entity.Exto?.ToULong(); frame.RegisterSet.Fpcw = entity.Fpcw?.ToUShort(); frame.RegisterSet.Fpsw = entity.Fpsw?.ToUShort(); frame.RegisterSet.Fptw = entity.Fptw?.ToUShort(); frame.RegisterSet.Fopcode = entity.Fopcode?.ToUShort(); frame.RegisterSet.Fpip = entity.Fpip?.ToUInt(); frame.RegisterSet.Fpipsel = entity.Fpipsel?.ToUInt(); frame.RegisterSet.Fpdp = entity.Fpdp?.ToUInt(); frame.RegisterSet.Fpdpsel = entity.Fpdpsel?.ToUInt(); frame.RegisterSet.Fs = entity.Fs?.ToUShort(); frame.RegisterSet.Gs = entity.Gs?.ToUShort(); frame.RegisterSet.Mm0 = entity.Mm0?.ToULong(); frame.RegisterSet.Mm1 = entity.Mm1?.ToULong(); frame.RegisterSet.Mm2 = entity.Mm2?.ToULong(); frame.RegisterSet.Mm3 = entity.Mm3?.ToULong(); frame.RegisterSet.Mm4 = entity.Mm4?.ToULong(); frame.RegisterSet.Mm5 = entity.Mm5?.ToULong(); frame.RegisterSet.Mm6 = entity.Mm6?.ToULong(); frame.RegisterSet.Mm7 = entity.Mm7?.ToULong(); frame.RegisterSet.Mxcsr = entity.Mxcsr?.ToUInt(); frame.RegisterSet.St0 = ByteArrayBuilder.StringToByteArray(entity.St0, true); frame.RegisterSet.St1 = ByteArrayBuilder.StringToByteArray(entity.St1, true); frame.RegisterSet.St2 = ByteArrayBuilder.StringToByteArray(entity.St2, true); frame.RegisterSet.St3 = ByteArrayBuilder.StringToByteArray(entity.St3, true); frame.RegisterSet.St4 = ByteArrayBuilder.StringToByteArray(entity.St4, true); frame.RegisterSet.St5 = ByteArrayBuilder.StringToByteArray(entity.St5, true); frame.RegisterSet.St6 = ByteArrayBuilder.StringToByteArray(entity.St6, true); frame.RegisterSet.St7 = ByteArrayBuilder.StringToByteArray(entity.St7, true); frame.RegisterSet.R10 = entity.R10?.ToULong(); frame.RegisterSet.R11 = entity.R11?.ToULong(); frame.RegisterSet.R12 = entity.R12?.ToULong(); frame.RegisterSet.R13 = entity.R13?.ToULong(); frame.RegisterSet.R14 = entity.R14?.ToULong(); frame.RegisterSet.R15 = entity.R15?.ToULong(); frame.RegisterSet.R8 = entity.R8?.ToULong(); frame.RegisterSet.R9 = entity.R9?.ToULong(); frame.RegisterSet.Rax = entity.Rax?.ToULong(); frame.RegisterSet.Rbp = entity.Rbp?.ToULong(); frame.RegisterSet.Rbx = entity.Rbx?.ToULong(); frame.RegisterSet.Rcx = entity.Rcx?.ToULong(); frame.RegisterSet.Rdi = entity.Rdi?.ToULong(); frame.RegisterSet.Rdx = entity.Rdx?.ToULong(); frame.RegisterSet.Rip = entity.Rip?.ToULong(); frame.RegisterSet.Rsi = entity.Rsi?.ToULong(); frame.RegisterSet.Rsp = entity.Rsp?.ToULong(); frame.RegisterSet.Ss = entity.Ss?.ToUShort(); frame.RegisterSet.Ymm0 = ByteArrayBuilder.StringToByteArray(entity.Ymm0, true); frame.RegisterSet.Ymm1 = ByteArrayBuilder.StringToByteArray(entity.Ymm1, true); frame.RegisterSet.Ymm2 = ByteArrayBuilder.StringToByteArray(entity.Ymm2, true); frame.RegisterSet.Ymm3 = ByteArrayBuilder.StringToByteArray(entity.Ymm3, true); frame.RegisterSet.Ymm4 = ByteArrayBuilder.StringToByteArray(entity.Ymm4, true); frame.RegisterSet.Ymm5 = ByteArrayBuilder.StringToByteArray(entity.Ymm5, true); frame.RegisterSet.Ymm6 = ByteArrayBuilder.StringToByteArray(entity.Ymm6, true); frame.RegisterSet.Ymm7 = ByteArrayBuilder.StringToByteArray(entity.Ymm7, true); frame.RegisterSet.Ymm8 = ByteArrayBuilder.StringToByteArray(entity.Ymm8, true); frame.RegisterSet.Ymm9 = ByteArrayBuilder.StringToByteArray(entity.Ymm9, true); frame.RegisterSet.Ymm10 = ByteArrayBuilder.StringToByteArray(entity.Ymm10, true); frame.RegisterSet.Ymm11 = ByteArrayBuilder.StringToByteArray(entity.Ymm11, true); frame.RegisterSet.Ymm12 = ByteArrayBuilder.StringToByteArray(entity.Ymm12, true); frame.RegisterSet.Ymm13 = ByteArrayBuilder.StringToByteArray(entity.Ymm13, true); frame.RegisterSet.Ymm14 = ByteArrayBuilder.StringToByteArray(entity.Ymm14, true); frame.RegisterSet.Ymm15 = ByteArrayBuilder.StringToByteArray(entity.Ymm15, true); return(frame); }
/// <summary> /// Extracts the stack frame entity. /// </summary> /// <param name="ownerId">The owner identifier.</param> /// <param name="stackFrame">The stack frame.</param> /// <param name="context">The context.</param> /// <returns>StackFrameEntity.</returns> internal StackFrameEntity ExtractStackFrameEntity(Guid ownerId, StackFrame stackFrame, IMcFlyContext context) { var entity = context.StackFrameEntities.Create <StackFrameEntity>(); entity.StackPointer = stackFrame.StackPointer.ToHexString(); entity.Function = stackFrame.FunctionName; entity.ModuleName = stackFrame.Module; entity.Offset = stackFrame.Offset.ToHexString(); entity.ReturnAddress = stackFrame.ReturnAddress.ToHexString(); entity.FrameId = ownerId; return(entity); }
/// <summary> /// Convert a frame domain object to an entity /// </summary> /// <param name="frame">The frame.</param> /// <param name="context">The context.</param> /// <returns>The corresponding database entity for the provided domain object</returns> /// <inheritdoc /> public FrameEntity ToEntity(Frame frame, IMcFlyContext context) { var first = context.FrameEntities.FirstOrDefault(x => x.Id == frame.Id && x.Id != Guid.Empty); if (first != null) { return(first); } // note: Don't use object initializer here because it throws off code coverage var entity = new FrameEntity(); entity.PosHi = frame.Position?.High ?? 0; entity.PosLo = frame.Position?.Low ?? 0; entity.ThreadId = frame.ThreadId; entity.Brfrom = frame.RegisterSet.Brfrom?.ToHexString(); entity.Brto = frame.RegisterSet.Brto?.ToHexString(); entity.Cs = frame.RegisterSet.Cs?.ToHexString(); entity.Dr0 = frame.RegisterSet.Dr0?.ToHexString(); entity.Dr1 = frame.RegisterSet.Dr1?.ToHexString(); entity.Dr2 = frame.RegisterSet.Dr2?.ToHexString(); entity.Dr3 = frame.RegisterSet.Dr3?.ToHexString(); entity.Dr6 = frame.RegisterSet.Dr6?.ToHexString(); entity.Dr7 = frame.RegisterSet.Dr7?.ToHexString(); entity.Ds = frame.RegisterSet.Ds.ToHexString(); entity.Efl = frame.RegisterSet.Efl?.ToHexString(); entity.Es = frame.RegisterSet.Es?.ToHexString(); entity.Exfrom = frame.RegisterSet.Exfrom?.ToHexString(); entity.Exto = frame.RegisterSet.Exto?.ToHexString(); entity.Fpcw = frame.RegisterSet.Fpcw?.ToHexString(); entity.Fpsw = frame.RegisterSet.Fpsw?.ToHexString(); entity.Fptw = frame.RegisterSet.Fptw?.ToHexString(); entity.Fopcode = frame.RegisterSet.Fopcode?.ToHexString(); entity.Fpip = frame.RegisterSet.Fpip?.ToHexString(); entity.Fpipsel = frame.RegisterSet.Fpipsel?.ToHexString(); entity.Fpdp = frame.RegisterSet.Fpdp?.ToHexString(); entity.Fpdpsel = frame.RegisterSet.Fpdpsel?.ToHexString(); entity.Fs = frame.RegisterSet.Fs?.ToHexString(); entity.Gs = frame.RegisterSet.Gs?.ToHexString(); entity.Mm0 = frame.RegisterSet.Mm0?.ToHexString(); entity.Mm1 = frame.RegisterSet.Mm1?.ToHexString(); entity.Mm2 = frame.RegisterSet.Mm2?.ToHexString(); entity.Mm3 = frame.RegisterSet.Mm3?.ToHexString(); entity.Mm4 = frame.RegisterSet.Mm4?.ToHexString(); entity.Mm5 = frame.RegisterSet.Mm5?.ToHexString(); entity.Mm6 = frame.RegisterSet.Mm6?.ToHexString(); entity.Mm7 = frame.RegisterSet.Mm7?.ToHexString(); entity.Mxcsr = frame.RegisterSet.Mxcsr?.ToHexString(); entity.St0 = frame.RegisterSet.St0?.ToHexString(true); entity.St1 = frame.RegisterSet.St1?.ToHexString(true); entity.St2 = frame.RegisterSet.St2?.ToHexString(true); entity.St3 = frame.RegisterSet.St3?.ToHexString(true); entity.St4 = frame.RegisterSet.St4?.ToHexString(true); entity.St5 = frame.RegisterSet.St5?.ToHexString(true); entity.St6 = frame.RegisterSet.St6?.ToHexString(true); entity.St7 = frame.RegisterSet.St7?.ToHexString(true); entity.R10 = frame.RegisterSet.R10?.ToHexString(); entity.R11 = frame.RegisterSet.R11?.ToHexString(); entity.R12 = frame.RegisterSet.R12?.ToHexString(); entity.R13 = frame.RegisterSet.R13?.ToHexString(); entity.R14 = frame.RegisterSet.R14?.ToHexString(); entity.R15 = frame.RegisterSet.R15?.ToHexString(); entity.R8 = frame.RegisterSet.R8?.ToHexString(); entity.R9 = frame.RegisterSet.R9?.ToHexString(); entity.Rax = frame.RegisterSet.Rax?.ToHexString(); entity.Rbp = frame.RegisterSet.Rbp?.ToHexString(); entity.Rbx = frame.RegisterSet.Rbx?.ToHexString(); entity.Rcx = frame.RegisterSet.Rcx?.ToHexString(); entity.Rdi = frame.RegisterSet.Rdi?.ToHexString(); entity.Rdx = frame.RegisterSet.Rdx?.ToHexString(); entity.Rip = frame.RegisterSet.Rip?.ToHexString(); entity.Rsi = frame.RegisterSet.Rsi?.ToHexString(); entity.Rsp = frame.RegisterSet.Rsp?.ToHexString(); entity.Ss = frame.RegisterSet.Ss?.ToHexString(); entity.Ymm0 = frame.RegisterSet.Ymm0?.ToHexString(true); entity.Ymm1 = frame.RegisterSet.Ymm1?.ToHexString(true); entity.Ymm2 = frame.RegisterSet.Ymm2?.ToHexString(true); entity.Ymm3 = frame.RegisterSet.Ymm3?.ToHexString(true); entity.Ymm4 = frame.RegisterSet.Ymm4?.ToHexString(true); entity.Ymm5 = frame.RegisterSet.Ymm5?.ToHexString(true); entity.Ymm6 = frame.RegisterSet.Ymm6?.ToHexString(true); entity.Ymm7 = frame.RegisterSet.Ymm7?.ToHexString(true); entity.Ymm8 = frame.RegisterSet.Ymm8?.ToHexString(true); entity.Ymm9 = frame.RegisterSet.Ymm9?.ToHexString(true); entity.Ymm10 = frame.RegisterSet.Ymm10?.ToHexString(true); entity.Ymm11 = frame.RegisterSet.Ymm11?.ToHexString(true); entity.Ymm12 = frame.RegisterSet.Ymm12?.ToHexString(true); entity.Ymm13 = frame.RegisterSet.Ymm13?.ToHexString(true); entity.Ymm14 = frame.RegisterSet.Ymm14?.ToHexString(true); entity.Ymm15 = frame.RegisterSet.Ymm15?.ToHexString(true); entity.OpCode = frame.DisassemblyLine?.OpCode.ToHexString(); entity.OpCodeMnemonic = frame.DisassemblyLine?.OpCodeMnemonic; entity.DisassemblyNote = frame.DisassemblyLine?.DisassemblyNote; entity.StackFrames = frame.StackTrace.StackFrames .Select(x => ExtractStackFrameEntity(entity.Id, x, context)).ToList(); return(entity); }