public void HPSC_DiscardNodes() { Given_Image32( 0x0010000, "55 8B EC a1 32 12 1a 12 5D c3"); Given_x86_32(); Given_RewriterHost(); Given_NoImportedProcedures(); mr.ReplayAll(); When_DisassembleProcedure(); var hps = new BlockConflictResolver(program, CreateScanResults(proc.Cfg), proc.IsValidAddress, host); hps.BlockConflictResolution(proc.BeginAddress); var sExp = #region Expected @"l00010000: // pred: push ebp l00010001: // pred: l00010000 mov ebp,esp l00010003: // pred: l00010001 mov eax,[121A1232] l00010008: // pred: l00010003 pop ebp l00010009: // pred: l00010008 ret "; #endregion AssertBlocks(sExp, proc.Cfg); }
public void HPSC_TrickyProc() { Given_Image32(0x0010000, TrickyProc); program.SegmentMap.AddSegment(new ImageSegment( "code", new MemoryArea(Address.Ptr32(0x11750000), new byte[100]), AccessMode.ReadExecute)); Given_x86_32(); Given_RewriterHost(); Given_NoImportedProcedures(); mr.ReplayAll(); When_DisassembleProcedure(); var hps = new BlockConflictResolver(program, CreateScanResults(proc.Cfg), proc.IsValidAddress, host); hps.BlockConflictResolution(proc.BeginAddress); var sExp = #region Expected @"l00010000: // pred: push ebp l00010001: // pred: l00010000 mov ebp,esp l00010003: // pred: l00010001 call 11750008 l0001000A: // pred: cmp al,00 l0001000C: // pred: l0001000A jnz 00010014 l0001000E: // pred: l0001000C mov al,00 l00010010: // pred: l0001000E jmp 00010019 l00010014: // pred: l0001000C mov eax,[01740000] l00010019: // pred: l00010010 l00010014 mov esp,ebp l0001001B: // pred: l00010019 pop ebp l0001001C: // pred: l0001001B ret "; #endregion AssertBlocks(sExp, proc.Cfg); }