private void Write(Arm64InstructionOperand op, MachineInstructionWriter writer) { switch (op.Type) { case Arm64InstructionOperandType.Register: writer.Write(A64Registers.RegisterByCapstoneID[op.RegisterValue.Value].Name); return; case Arm64InstructionOperandType.Immediate: if (IsJump()) { writer.Write("${0:X16}", op.ImmediateValue.Value); } else { WriteImmediateValue(op.ImmediateValue.Value, writer); if (op.Shifter != null) { this.WriteShift(op, writer); } } return; } throw new NotImplementedException(op.Type.ToString()); }
private void WriteShift(Arm64InstructionOperand op, MachineInstructionWriter writer) { switch (op.Shifter.Type) { case Arm64ShifterType.ASR: WriteImmShift("asr", op.Shifter.Value, writer); break; case Arm64ShifterType.LSL: WriteImmShift("lsl", op.Shifter.Value, writer); break; case Arm64ShifterType.LSR: WriteImmShift("lsr", op.Shifter.Value, writer); break; case Arm64ShifterType.MSL: WriteImmShift("msl", op.Shifter.Value, writer); break; case Arm64ShifterType.ROR: WriteImmShift("ror", op.Shifter.Value, writer); break; case Arm64ShifterType.Invalid: break; } }