Example #1
0
        public override IEnumerable <MachineInstruction> CreateDisassembler(EndianImageReader rdr)
        {
            var   bytes  = rdr.Bytes;
            ulong uAddr  = rdr.Address.ToLinear();
            var   hBytes = GCHandle.Alloc(bytes, GCHandleType.Pinned);
            INativeDisassembler ndasm = null;

            try
            {
                ndasm = native.CreateDisassembler(hBytes.AddrOfPinnedObject(), bytes.Length, (int)rdr.Offset, uAddr);
                for (;;)
                {
                    INativeInstruction nInstr = ndasm.NextInstruction();
                    if (nInstr == null)
                    {
                        yield break;
                    }
                    else
                    {
                        yield return(new Arm64Instruction(nInstr));
                    }
                }
            }
            finally
            {
                if (ndasm != null)
                {
                    ndasm = null;
                }
                if (hBytes != null && hBytes.IsAllocated)
                {
                    hBytes.Free();
                }
            }
        }
Example #2
0
 /// <summary>
 /// Creates a new managed disassembler
 /// </summary>
 /// <param name="compilationData">The compilation data</param>
 /// <param name="createDisassembler">Function to create the disassembler</param>
 /// <param name="options">The options</param>
 public Disassembler(
     AbstractCompilationData compilationData,
     Func <AbstractCompilationData, INativeDisassembler> createDisassembler,
     DisassemblerOptions options = DisassemblerOptions.None)
 {
     this.compilationData    = compilationData;
     this.nativeDisassembler = createDisassembler(compilationData);
     this.options            = options;
 }
 /// <summary>
 /// Creates a new managed disassembler
 /// </summary>
 /// <param name="compilationData">The compilation data</param>
 /// <param name="createDisassembler">Function to create the disassembler</param>
 /// <param name="options">The options</param>
 public Disassembler(
     AbstractCompilationData compilationData,
     Func<AbstractCompilationData, INativeDisassembler> createDisassembler,
     DisassemblerOptions options = DisassemblerOptions.None)
 {
     this.compilationData = compilationData;
     this.nativeDisassembler = createDisassembler(compilationData);
     this.options = options;
 }