/// <summary>Invoke the native Capstone exported function that will open /// a disassembler for the given pair of architecture and mode.</summary> /// <param name="architecture">Target architecture</param> /// <param name="mode">Target mode</param> /// <returns>The native handle that is to be wrapped by our super class /// safe handle.</returns> /// <remarks>This method is for use by the constructor exclusively.</remarks> private static IntPtr CreateNativeAssembler(DisassembleArchitecture architecture, DisassembleMode mode) { IntPtr native; CapstoneImport.Open(architecture, mode, out native).ThrowOnCapstoneError(); return(native); }
/// <summary> /// Create a Disassembler. /// </summary> /// <param name="architecture"> /// The disassembler's architecture. /// </param> /// <param name="mode"> /// The disassembler's mode. /// </param> protected CapstoneDisassembler(DisassembleArchitecture architecture, DisassembleMode mode) { this._architecture = architecture; this._mode = mode; this._handle = NativeCapstone.Create(this._architecture, this._mode); this.EnableDetails = false; this.Syntax = DisassembleSyntaxOptionValue.Default; }
/// <summary>Create a Disassembler.</summary> /// <param name="architecture">The disassembler's architecture.</param> /// <param name="mode">The disassembler's mode.</param> protected CapstoneDisassembler(DisassembleArchitecture architecture, DisassembleMode mode) : base(CreateNativeAssembler(architecture, mode)) { this.Architecture = architecture; this._mode = mode; this.EnableDetails = false; this.Syntax = DisassembleSyntaxOptionValue.Default; return; }
/// <summary> /// Create a Capstone Disassembler. /// </summary> /// <param name="architecture"> /// The disassemble architecture. /// </param> /// <param name="mode"> /// The disassemble mode. /// </param> /// <returns> /// A Capstone handle. /// </returns> /// <exception cref="System.InvalidOperationException"> /// Thrown if a Capstone disassembler could not be created. /// </exception> public static SafeCapstoneHandle Create(DisassembleArchitecture architecture, DisassembleMode mode) { var iArchitecture = (int) architecture; var iMode = (int) mode; var pHandle = IntPtr.Zero; // Open Capstone Handle. // // ... var resultCode = CapstoneImport.Open(iArchitecture, iMode, ref pHandle); if (resultCode != (int) DisassembleErrorCode.Ok) { throw new InvalidOperationException("Unable to create a Capstone disassembler."); } var handle = new SafeCapstoneHandle(pHandle); return handle; }
/// <summary> /// Create a Capstone Disassembler. /// </summary> /// <param name="architecture"> /// The disassemble architecture. /// </param> /// <param name="mode"> /// The disassemble mode. /// </param> /// <returns> /// A Capstone handle. /// </returns> /// <exception cref="System.InvalidOperationException"> /// Thrown if a Capstone disassembler could not be created. /// </exception> public static SafeCapstoneHandle Create(DisassembleArchitecture architecture, DisassembleMode mode) { var iArchitecture = (int)architecture; var iMode = (int)mode; var pHandle = IntPtr.Zero; // Open Capstone Handle. // // ... var resultCode = CapstoneImport.Open(iArchitecture, iMode, ref pHandle); if (resultCode != (int)DisassembleErrorCode.Ok) { throw new InvalidOperationException("Unable to create a Capstone disassembler."); } var handle = new SafeCapstoneHandle((UIntPtr)(ulong)(long)pHandle); return(handle); }
/// <summary> /// Create a Disassembler. /// </summary> /// <param name="disassembleArchitecture"> /// The hardware architecture for the disassembler to use. /// </param> /// <param name="disassembleMode"> /// The hardware mode for the disassembler to use. /// </param> /// <returns> /// A disassembler handle. /// </returns> /// <exception cref="Gee.External.Capstone.CapstoneException"> /// Thrown if a disassembler could not be created. /// </exception> /// <exception cref="System.ArgumentException"> /// Thrown if the disassemble architecture is invalid, or if the disassemble mode is invalid or /// unsupported by the disassemble architecture. /// </exception> /// <exception cref="System.OutOfMemoryException"> /// Thrown if sufficient memory cannot be allocated to perform the operation as a rare indication that the /// system is under heavy load. /// </exception> internal static NativeDisassemblerHandle CreateDisassembler(DisassembleArchitecture disassembleArchitecture, NativeDisassembleMode disassembleMode) { var pDisassembler = IntPtr.Zero; var resultCode = NativeCapstoneImport.CreateDisassembler(disassembleArchitecture, disassembleMode, ref pDisassembler); if (resultCode != NativeCapstoneResultCode.Ok) { if (resultCode == NativeCapstoneResultCode.UninitializedMemoryManagement) { const string detailMessage = "Memory Management is uninitialized."; throw new CapstoneException(detailMessage); } else if (resultCode == NativeCapstoneResultCode.UnsupportedDisassembleArchitecture) { var detailMessage = $"A disassemble architecture ({disassembleArchitecture}) is invalid."; throw new ArgumentException(detailMessage, nameof(disassembleArchitecture)); } else if (resultCode == NativeCapstoneResultCode.UnsupportedDisassembleMode) { var detailMessage = $"A disassemble mode ({disassembleMode}) is invalid."; throw new ArgumentException(detailMessage, nameof(disassembleMode)); } else if (resultCode == NativeCapstoneResultCode.OutOfMemory) { const string detailMessage = "Sufficient memory could not be allocated."; throw new OutOfMemoryException(detailMessage); } else { const string detailMessage = "A disassembler could not be created."; throw new CapstoneException(detailMessage); } } var hDisassembler = new NativeDisassemblerHandle(pDisassembler); return(hDisassembler); }
internal static extern NativeCapstoneResultCode CreateDisassembler(DisassembleArchitecture disassembleArchitecture, NativeDisassembleMode disassembleMode, ref IntPtr pDisassembler);
internal static extern CapstoneErrorCode Open( [In] DisassembleArchitecture architecture, [In] DisassembleMode mode, [Out] out IntPtr handle);