void ProcessNextBlocks(X86Instruction ins) { long target = 0; BasicBlock nb = null; switch (ins.Mnemonic) { case X86Mnemonic.Jmp: { if (ins.Operand1.OperandUsage == X86OperandUsage.Normal) { target = (long)(ulong)ins.Operand1.Value; nb = method.GetOrCreateBlock(target); nextBlocks.Add(nb); nb.prevBlocks.Add(this); } } break; case X86Mnemonic.Retn: break; case X86Mnemonic.Jl: case X86Mnemonic.Je: case X86Mnemonic.Jne: { target = (long)(ulong)ins.Operand1.Value; nb = method.GetOrCreateBlock(target); nextBlocks.Add(nb); nb.prevBlocks.Add(this); target = ins.Offset + ins.ComputeSize(); nb = method.GetOrCreateBlock(target); nextBlocks.Add(nb); nb.prevBlocks.Add(this); } break; default: throw new NotImplementedException(); } }