/// <summary> /// Get an Instruction's Details. /// </summary> /// <param name="instruction"> /// An instruction. /// </param> /// <returns> /// The instruction's details. A null reference indicates the instruction was disassembled without /// details. /// </returns> internal static NativeInstructionDetail?GetInstructionDetail(ref NativeInstruction instruction) { NativeInstructionDetail?instructionDetails = null; if (instruction.Details != IntPtr.Zero) { // ... // // Throws an exception if the operation fails. var pInstructionDetails = instruction.Details; instructionDetails = MarshalExtension.PtrToStructure <NativeInstructionDetail>(pInstructionDetails); } return(instructionDetails); }
/// <summary> /// Get an Instruction's Architecture Specific Details. /// </summary> /// <typeparam name="TInstructionDetails"> /// The type of the instruction's architecture specific details. /// </typeparam> /// <param name="instruction"> /// An instruction. /// </param> /// <returns> /// The instruction's architecture specific details. A null reference indicates the instruction was /// disassembled without its details. /// </returns> internal static TInstructionDetails?GetInstructionDetail <TInstructionDetails>(ref NativeInstruction instruction) where TInstructionDetails : struct { TInstructionDetails?instructionDetails = null; if (instruction.Details != IntPtr.Zero) { // ... // // Throws an exception if the operation fails. var pInstructionDetails = instruction.Details + NativeCapstone.MagicInstructionArchitectureDetailsFieldOffset; instructionDetails = MarshalExtension.PtrToStructure <TInstructionDetails>(pInstructionDetails); } return(instructionDetails); }
/// <summary> /// Convert a Native Instruction to a ARM64 Dissembled Instruction. /// </summary> /// <param name="this"> /// A native instruction. /// </param> /// <returns> /// A dissembled instruction. /// </returns> public static Instruction <Arm64Instruction, Arm64Register, Arm64InstructionGroup, Arm64InstructionDetail> AsArm64Instruction(this NativeInstruction @this) { var @object = @this.AsInstruction <Arm64Instruction, Arm64Register, Arm64InstructionGroup, Arm64InstructionDetail>(); @object.Id = (Arm64Instruction)@this.Id; return(@object); }
/// <summary> /// Convert a Native Instruction to an X86 Dissembled Instruction. /// </summary> /// <param name="this"> /// A native instruction. /// </param> /// <returns> /// A dissembled instruction. /// </returns> public static Instruction <X86Instruction, X86Register, X86InstructionGroup, X86InstructionDetail> AsX86Instruction(this NativeInstruction @this) { var @object = @this.AsInstruction <X86Instruction, X86Register, X86InstructionGroup, X86InstructionDetail>(); @object.Id = (X86Instruction)@this.Id; return(@object); }
/// <summary> /// Convert a Native Instruction to a Dissembled Instruction. /// </summary> /// <param name="this"> /// A native instruction. /// </param> /// <returns> /// A dissembled instruction. /// </returns> public static Instruction <TArchitectureInstruction, TArchitectureRegister, TArchitectureGroup, TArchitectureDetail> AsInstruction <TArchitectureInstruction, TArchitectureRegister, TArchitectureGroup, TArchitectureDetail>(this NativeInstruction @this) { var @object = new Instruction <TArchitectureInstruction, TArchitectureRegister, TArchitectureGroup, TArchitectureDetail>(); @object.Address = (long)@this.Address; @object.Bytes = @this.ManagedBytes; @object.Mnemonic = @this.ManagedMnemonic; @object.Operand = @this.ManagedOperand; return(@object); }