AsmResolver.X86.X86Disassembler.ReadNextInstruction C# (CSharp) Метод

ReadNextInstruction() публичный Метод

Disassembles the next instruction of the input stream.
public ReadNextInstruction ( ) : X86Instruction
Результат X86Instruction
        public X86Instruction ReadNextInstruction()
        {
            long offset = BaseAddress + _reader.Position;
            byte code1 = _reader.ReadByte();
            var instruction = new X86Instruction(offset)
            {
                OpCode = ReadOpcode(code1)
            };

            if (instruction.OpCode.Mnemonics == null)
            {
                instruction.Operand1 = new X86Operand(code1);
                return instruction;
            }

            var registerToken = instruction.OpCode.HasRegisterToken ? _reader.ReadByte() : (byte)0;
            var mnemonicIndex = instruction.OpCode.HasOpCodeModifier ? (registerToken >> 3) & 7 : 0;
            instruction.Mnemonic = instruction.OpCode.Mnemonics[mnemonicIndex];

            instruction.Operand1 = ReadOperand(instruction.OpCode.OperandTypes1[mnemonicIndex],
                instruction.OpCode.OperandSizes1[mnemonicIndex], instruction.OpCode.Op1, registerToken);

            instruction.Operand2 = ReadOperand(instruction.OpCode.OperandTypes2[mnemonicIndex],
                instruction.OpCode.OperandSizes2[mnemonicIndex], instruction.OpCode.Op1, registerToken);

            return instruction;
        }

Usage Example

Пример #1
0
        public static X86MethodBody FromReader(IBinaryStreamReader reader)
        {
            var body = new X86MethodBody();

            var disassembler = new X86Disassembler(reader);

            while (reader.Position < reader.StartPosition + reader.Length)
            {
                body.Instructions.Add(disassembler.ReadNextInstruction());
            }

            return(body);
        }
All Usage Examples Of AsmResolver.X86.X86Disassembler::ReadNextInstruction