本文整理汇总了C#中MachineInstructionWriter.WriteAddress方法的典型用法代码示例。如果您正苦于以下问题:C# MachineInstructionWriter.WriteAddress方法的具体用法?C# MachineInstructionWriter.WriteAddress怎么用?C# MachineInstructionWriter.WriteAddress使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MachineInstructionWriter
的用法示例。
在下文中一共展示了MachineInstructionWriter.WriteAddress方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Write
public override void Write(bool fExplicit, MachineInstructionWriter writer)
{
if (Base != null)
{
if (Offset != null)
{
int offset = Offset.ToInt32();
string fmt;
if (offset > 0)
{
fmt = "({0}+{1:X2})";
}
else if (offset < 0)
{
offset = -offset;
fmt = "({0}-{1:X2})";
}
else
{
fmt = "({0})";
}
writer.Write(string.Format(fmt, Base, offset));
}
else
{
writer.Write(string.Format("({0})", Base));
}
}
else
{
writer.Write("(");
writer.WriteAddress(string.Format("{0:X4}", Offset.ToUInt16()), Address.Ptr16(Offset.ToUInt16()));
writer.Write(")");
}
}
示例2: Write
public override void Write(bool fExplicit, MachineInstructionWriter writer)
{
string s;
if (base.Width.Size == 2)
s = string.Format("{0:X4}", Address.ToLinear());
else
s = Address.ToString();
writer.WriteAddress(s, Address);
}
示例3: Write
public override void Write(bool fExplicit, MachineInstructionWriter writer)
{
writer.WriteAddress(Address.ToString(), Address);
}
示例4: Write
public override void Write(bool fExplicit, MachineInstructionWriter writer)
{
var s = FormatValue(value);
var pt = value.DataType as PrimitiveType;
if (pt != null && pt.Domain == Domain.Pointer)
writer.WriteAddress(s, Address.FromConstant(value)); //$TODO: add WriteAddress(string, Constant) to MachineINstructionWriter
else if (value.DataType is Pointer)
writer.WriteAddress(s, Address.FromConstant(value));
else
writer.Write(s);
}
示例5: Write
public void Write(ArmInstructionOperand op, MachineInstructionWriter writer)
{
switch (op.Type)
{
case ArmInstructionOperandType.Immediate:
if (instruction.Id == Opcode.B ||
instruction.Id == Opcode.BL ||
instruction.Id == Opcode.BLX)
{
writer.Write("$");
writer.WriteAddress(
string.Format("{0:X8}", op.ImmediateValue.Value),
Address.Ptr32((uint)op.ImmediateValue.Value));
break;
}
writer.Write("#");
WriteImmediateValue(op.ImmediateValue.Value, writer);
break;
case ArmInstructionOperandType.CImmediate:
writer.Write("c{0}", op.ImmediateValue);
break;
case ArmInstructionOperandType.PImmediate:
writer.Write("p{0}", op.ImmediateValue);
break;
case ArmInstructionOperandType.Register:
if (op.IsSubtracted)
writer.Write('-');
writer.Write(A32Registers.RegisterByCapstoneID[op.RegisterValue.Value].Name);
WriteShift(op, writer);
break;
case ArmInstructionOperandType.Memory:
WriteMemoryOperand(op, writer);
break;
case ArmInstructionOperandType.SetEnd:
writer.Write(op.SetEndValue.ToString().ToLowerInvariant());
break;
default:
throw new NotImplementedException(string.Format(
"Can't disasseble {0} {1}. Unknown operand type: {2}",
instruction.Mnemonic,
instruction.Operand,
op.Type));
}
}
示例6: Write
public override void Write(bool fExplicit, MachineInstructionWriter writer)
{
if (fExplicit)
{
string s;
if (Width == PrimitiveType.Byte)
s = "byte ptr ";
else if (Width == PrimitiveType.Word16)
s = "word ptr ";
else if (Width.Size == 4)
s = "dword ptr ";
else if (Width == PrimitiveType.Word64)
s = "qword ptr ";
else if (Width == PrimitiveType.Real32)
s = "float ptr ";
else if (Width == PrimitiveType.Real64)
s = "double ptr ";
else if (Width == PrimitiveType.Real80 || Width == PrimitiveType.Bcd80)
s = "tword ptr ";
else if (Width == PrimitiveType.Word128)
s = "xmmword ptr ";
else if (Width == PrimitiveType.Word256)
s = "ymmword ptr ";
else
throw new ArgumentOutOfRangeException();
writer.Write(s);
}
if (SegOverride != RegisterStorage.None)
{
writer.Write(SegOverride.ToString());
writer.Write(":");
}
writer.Write("[");
if (Base != RegisterStorage.None)
{
writer.Write(Base.ToString());
}
else
{
var s = FormatUnsignedValue(Offset);
writer.WriteAddress(s, Address.FromConstant(Offset));
}
if (Index != RegisterStorage.None)
{
writer.Write("+");
writer.Write(Index.ToString());
if (Scale > 1)
{
writer.Write("*");
writer.Write(Scale);
}
}
if (Base != RegisterStorage.None && Offset != null && Offset.IsValid)
{
if (Offset.DataType == PrimitiveType.Byte || Offset.DataType == PrimitiveType.SByte)
{
writer.Write(FormatSignedValue(Offset));
}
else
{
var off = Offset.ToInt32();
var absOff = Math.Abs(off);
if (Offset.DataType.Size > 2 && off < 0 && absOff < 0x10000)
{
// Special case for negative 32-bit offsets whose
// absolute value < 0x10000 (GitHub issue #252)
writer.Write("-");
writer.Write("{0:X8}", absOff);
}
else
{
writer.Write("+");
writer.Write(FormatUnsignedValue(Offset));
}
}
}
writer.Write("]");
}
示例7: WriteOp
private void WriteOp(MachineOperand op, MachineInstructionWriter writer)
{
var rop = op as RegisterOperand;
if (rop != null)
{
writer.Write(rop.Register.Name);
return;
}
var immop = op as ImmediateOperand;
if (immop != null)
{
writer.Write(immop.Value.ToString());
return;
}
var addrop = op as AddressOperand;
if (addrop != null)
{
//$TODO: 32-bit?
writer.WriteAddress(string.Format("{0:X16}", addrop.Address.ToLinear()), addrop.Address);
return;
}
throw new NotImplementedException();
}
示例8: Write
public override void Write(bool fExplicit, MachineInstructionWriter writer)
{
writer.Write("$");
writer.WriteAddress(string.Format("{0,8:X}", Address), Address);
}