Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }