本文整理匯總了C#中System.ByteBuffer.ReadInt32方法的典型用法代碼示例。如果您正苦於以下問題:C# ByteBuffer.ReadInt32方法的具體用法?C# ByteBuffer.ReadInt32怎麽用?C# ByteBuffer.ReadInt32使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類System.ByteBuffer
的用法示例。
在下文中一共展示了ByteBuffer.ReadInt32方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。
示例1: GetDebugHeader
public ImageDebugDirectory GetDebugHeader(out byte[] header)
{
var section = GetSectionAtVirtualAddress(Debug.VirtualAddress);
var buffer = new ByteBuffer(section.Data);
buffer.position = (int)(Debug.VirtualAddress - section.VirtualAddress);
var directory = new ImageDebugDirectory
{
Characteristics = buffer.ReadInt32(),
TimeDateStamp = buffer.ReadInt32(),
MajorVersion = buffer.ReadInt16(),
MinorVersion = buffer.ReadInt16(),
Type = buffer.ReadInt32(),
SizeOfData = buffer.ReadInt32(),
AddressOfRawData = buffer.ReadInt32(),
PointerToRawData = buffer.ReadInt32(),
};
if (directory.SizeOfData == 0 || directory.PointerToRawData == 0)
{
header = Empty<byte>.Array;
return directory;
}
buffer.position = (int)(directory.PointerToRawData - section.PointerToRawData);
header = new byte[directory.SizeOfData];
Buffer.BlockCopy(buffer.buffer, buffer.position, header, 0, header.Length);
return directory;
}
示例2: PatchRawCode
void PatchRawCode(ByteBuffer buffer, int code_size, CodeWriter writer)
{
var metadata = writer.metadata;
buffer.WriteBytes(ReadBytes(code_size));
var end = buffer.position;
buffer.position -= code_size;
while (buffer.position < end)
{
OpCode opcode;
var il_opcode = buffer.ReadByte();
if (il_opcode != 0xfe)
{
opcode = OpCodes.OneByteOpCode[il_opcode];
}
else
{
var il_opcode2 = buffer.ReadByte();
opcode = OpCodes.TwoBytesOpCode[il_opcode2];
}
switch (opcode.OperandType)
{
case OperandType.ShortInlineI:
case OperandType.ShortInlineBrTarget:
case OperandType.ShortInlineVar:
case OperandType.ShortInlineArg:
buffer.position += 1;
break;
case OperandType.InlineVar:
case OperandType.InlineArg:
buffer.position += 2;
break;
case OperandType.InlineBrTarget:
case OperandType.ShortInlineR:
case OperandType.InlineI:
buffer.position += 4;
break;
case OperandType.InlineI8:
case OperandType.InlineR:
buffer.position += 8;
break;
case OperandType.InlineSwitch:
var length = buffer.ReadInt32();
buffer.position += length * 4;
break;
case OperandType.InlineString:
var @string = GetString(new MetadataToken(buffer.ReadUInt32()));
buffer.position -= 4;
buffer.WriteUInt32(
new MetadataToken(
TokenType.String,
metadata.user_string_heap.GetStringIndex(@string)).ToUInt32());
break;
case OperandType.InlineSig:
var call_site = GetCallSite(new MetadataToken(buffer.ReadUInt32()));
buffer.position -= 4;
buffer.WriteUInt32(writer.GetStandAloneSignature(call_site).ToUInt32());
break;
case OperandType.InlineTok:
case OperandType.InlineType:
case OperandType.InlineMethod:
case OperandType.InlineField:
var provider = reader.LookupToken(new MetadataToken(buffer.ReadUInt32()));
buffer.position -= 4;
buffer.WriteUInt32(metadata.LookupToken(provider).ToUInt32());
break;
}
}
}