本文整理汇总了C#中IBinaryReader.ReadUInt32方法的典型用法代码示例。如果您正苦于以下问题:C# IBinaryReader.ReadUInt32方法的具体用法?C# IBinaryReader.ReadUInt32怎么用?C# IBinaryReader.ReadUInt32使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IBinaryReader
的用法示例。
在下文中一共展示了IBinaryReader.ReadUInt32方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ReadHeader
static bool ReadHeader(IBinaryReader reader, out ushort flags, out uint codeSize) {
byte b = reader.ReadByte();
switch (b & 7) {
case 2:
case 6:
flags = 2;
codeSize = (uint)(b >> 2);
return true;
case 3:
flags = (ushort)((reader.ReadByte() << 8) | b);
uint headerSize = (byte)(flags >> 12);
ushort maxStack = reader.ReadUInt16();
codeSize = reader.ReadUInt32();
uint localVarSigTok = reader.ReadUInt32();
reader.Position += -12 + headerSize * 4;
if (headerSize < 3)
flags &= 0xFFF7;
return true;
default:
flags = 0;
codeSize = 0;
return false;
}
}
示例2: Read
/// <summary>
/// Reads the column
/// </summary>
/// <param name="reader">A reader positioned on this column</param>
/// <returns>The column value</returns>
public uint Read(IBinaryReader reader) {
switch (size) {
case 1: return reader.ReadByte();
case 2: return reader.ReadUInt16();
case 4: return reader.ReadUInt32();
default: throw new InvalidOperationException("Invalid column size");
}
}
示例3: TryCreateIcon
static byte[] TryCreateIcon(IBinaryReader reader, ResourceDirectory iconDir) {
try {
reader.Position = 0;
var outStream = new MemoryStream();
var writer = new BinaryWriter(outStream);
// Write GRPICONDIR
writer.Write(reader.ReadUInt16());
writer.Write(reader.ReadUInt16());
ushort numImages;
writer.Write(numImages = reader.ReadUInt16());
var entries = new List<GrpIconDirEntry>();
for (int i = 0; i < numImages; i++) {
var e = new GrpIconDirEntry();
entries.Add(e);
e.bWidth = reader.ReadByte();
e.bHeight = reader.ReadByte();
e.bColorCount = reader.ReadByte();
e.bReserved = reader.ReadByte();
e.wPlanes = reader.ReadUInt16();
e.wBitCount = reader.ReadUInt16();
e.dwBytesInRes = reader.ReadUInt32();
e.nID = reader.ReadUInt16();
}
uint dataOffset = 2 * 3 + (uint)entries.Count * 0x10;
foreach (var e in entries) {
writer.Write(e.bWidth);
writer.Write(e.bHeight);
writer.Write(e.bColorCount);
writer.Write(e.bReserved);
writer.Write(e.wPlanes);
writer.Write(e.wBitCount);
writer.Write(e.dwBytesInRes);
writer.Write(dataOffset);
dataOffset += e.dwBytesInRes;
}
foreach (var e in entries) {
var d = iconDir.Directories.FirstOrDefault(a => a.Name == new ResourceName(e.nID));
if (d == null || d.Data.Count == 0)
return null;
var r = d.Data[0].Data;
Debug.Assert(r.Length == e.dwBytesInRes);
if (r.Length < e.dwBytesInRes)
return null;
r.Position = 0;
writer.Write(r.ReadBytes((int)e.dwBytesInRes), 0, (int)e.dwBytesInRes);
}
return outStream.ToArray();
}
catch (IOException) {
}
return null;
}
示例4: CouldBeImage
static bool CouldBeImage(IBinaryReader reader) {
reader.Position = 0;
if (reader.Length < 0x16)
return false;
uint d = reader.ReadUInt32();
if (unchecked((ushort)d) == 0x4D42) {
// Possible BMP image
reader.Position -= 2;
uint size = reader.ReadUInt32();
if (size > reader.Length)
return false;
reader.Position += 4;
uint offs = reader.ReadUInt32();
return offs < size;
}
// Check if GIF87a or GIF89a
if (d == 0x38464947)
return (d = reader.ReadUInt16()) == 0x6139 || d == 0x6137;
// Check if PNG
if (d == 0x474E5089)
return reader.ReadUInt32() == 0x0A1A0A0D;
// Check if ICO or CUR
if (d == 0x00010000 || d == 0x00020000) {
int num = reader.ReadUInt16();
if (num <= 0)
return false;
reader.Position += 8;
uint size = reader.ReadUInt32();
uint offs = reader.ReadUInt32();
uint end = unchecked(offs + size);
return offs <= end && end <= reader.Length;
}
return false;
}
示例5: ParseMethodBody2
static MethodBodyHeader ParseMethodBody2(IBinaryReader reader, out byte[] code, out byte[] extraSections) {
var mbHeader = new MethodBodyHeader();
uint codeOffset;
byte b = Peek(reader);
if ((b & 3) == 2) {
mbHeader.flags = 2;
mbHeader.maxStack = 8;
mbHeader.codeSize = (uint)(reader.ReadByte() >> 2);
mbHeader.localVarSigTok = 0;
codeOffset = 1;
}
else if ((b & 7) == 3) {
mbHeader.flags = reader.ReadUInt16();
codeOffset = (uint)(4 * (mbHeader.flags >> 12));
if (codeOffset != 12)
throw new InvalidMethodBody();
mbHeader.maxStack = reader.ReadUInt16();
mbHeader.codeSize = reader.ReadUInt32();
if (mbHeader.codeSize > int.MaxValue)
throw new InvalidMethodBody();
mbHeader.localVarSigTok = reader.ReadUInt32();
if (mbHeader.localVarSigTok != 0 && (mbHeader.localVarSigTok >> 24) != 0x11)
throw new InvalidMethodBody();
}
else
throw new InvalidMethodBody();
if (mbHeader.codeSize + codeOffset > reader.Length)
throw new InvalidMethodBody();
code = reader.ReadBytes((int)mbHeader.codeSize);
if ((mbHeader.flags & 8) != 0)
extraSections = ReadExtraSections2(reader);
else
extraSections = null;
return mbHeader;
}
示例6: ReadSmallExceptionHandlers
void ReadSmallExceptionHandlers(IBinaryReader ehReader) {
int num = GetNumberOfExceptionHandlers((uint)ehReader.ReadByte() / 12);
ehReader.Position += 2;
for (int i = 0; i < num; i++) {
var eh = new ExceptionHandler((ExceptionHandlerType)ehReader.ReadUInt16());
uint offs = ehReader.ReadUInt16();
eh.TryStart = GetInstruction(offs);
eh.TryEnd = GetInstruction(offs + ehReader.ReadByte());
offs = ehReader.ReadUInt16();
eh.HandlerStart = GetInstruction(offs);
eh.HandlerEnd = GetInstruction(offs + ehReader.ReadByte());
if (eh.HandlerType == ExceptionHandlerType.Catch)
eh.CatchType = opResolver.ResolveToken(ehReader.ReadUInt32(), gpContext) as ITypeDefOrRef;
else if (eh.HandlerType == ExceptionHandlerType.Filter)
eh.FilterStart = GetInstruction(ehReader.ReadUInt32());
else
ehReader.ReadUInt32();
Add(eh);
}
}
示例7: Create
public static DecrypterV100 Create(IBinaryReader reader) {
reader.Position = 0;
if (reader.Length < 12)
return null;
if (reader.ReadUInt32() != RESOURCE_MAGIC)
return null;
return new DecrypterV100(new Version(reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), reader.ReadByte()));
}
示例8: ReadBundleGroup
private IEnumerable<HgChunk> ReadBundleGroup(IBinaryReader binaryReader)
{
const uint nullChunkMaxSize = 4;
const int chunkHeaderSize = 84;
uint length;
while((length = binaryReader.ReadUInt32()) > nullChunkMaxSize)
{
var nodeID = new HgNodeID(binaryReader.ReadBytes(20));
var firstParentNodeID = new HgNodeID(binaryReader.ReadBytes(20));
var secondParentNodeID = new HgNodeID(binaryReader.ReadBytes(20));
var changesetNodeID = new HgNodeID(binaryReader.ReadBytes(20));
var dataLength = (int)length - chunkHeaderSize;
var data = new byte[dataLength];
binaryReader.Read(data, 0, dataLength);
var chunk = new HgChunk(nodeID, firstParentNodeID, secondParentNodeID, changesetNodeID, data);
yield return chunk;
} // while
}
示例9: CouldBeResourcesFile
/// <summary>
/// Returns true if it's possibly resources file data
/// </summary>
/// <param name="reader">Reader</param>
/// <returns></returns>
public static bool CouldBeResourcesFile(IBinaryReader reader) {
return reader.CanRead(4) && reader.ReadUInt32() == 0xBEEFCACE;
}
示例10: Initialize
/// <summary>
/// Reads the directory header and initializes <see cref="ResourceDirectory.directories"/> and
/// <see cref="ResourceDirectory.data"/>.
/// </summary>
/// <param name="reader"></param>
void Initialize(IBinaryReader reader) {
if (depth > MAX_DIR_DEPTH || !reader.CanRead(16)) {
InitializeDefault();
return;
}
characteristics = reader.ReadUInt32();
timeDateStamp = reader.ReadUInt32();
majorVersion = reader.ReadUInt16();
minorVersion = reader.ReadUInt16();
ushort numNamed = reader.ReadUInt16();
ushort numIds = reader.ReadUInt16();
int total = numNamed + numIds;
if (!reader.CanRead(total * 8)) {
InitializeDefault();
return;
}
dataInfos = new List<EntryInfo>();
dirInfos = new List<EntryInfo>();
long offset = reader.Position;
for (int i = 0; i < total; i++, offset += 8) {
reader.Position = offset;
uint nameOrId = reader.ReadUInt32();
uint dataOrDirectory = reader.ReadUInt32();
ResourceName name;
if ((nameOrId & 0x80000000) != 0)
name = new ResourceName(ReadString(reader, nameOrId & 0x7FFFFFFF) ?? string.Empty);
else
name = new ResourceName((int)nameOrId);
if ((dataOrDirectory & 0x80000000) == 0)
dataInfos.Add(new EntryInfo(name, dataOrDirectory));
else
dirInfos.Add(new EntryInfo(name, dataOrDirectory & 0x7FFFFFFF));
}
directories = new LazyList<ResourceDirectory>(dirInfos.Count, null, (ctx, i) => ReadResourceDirectory((int)i));
data = new LazyList<ResourceData>(dataInfos.Count, null, (ctx, i) => ReadResourceData((int)i));
}
示例11: PatchDwords
static void PatchDwords(MyPEImage peImage, IBinaryReader reader, int count) {
for (int i = 0; i < count; i++) {
uint rva = reader.ReadUInt32();
uint data = reader.ReadUInt32();
peImage.DotNetSafeWrite(rva, BitConverter.GetBytes(data));
}
}
示例12: ReadExceptionHandlers
static byte[] ReadExceptionHandlers(IBinaryReader reader, int numExceptions) {
if (numExceptions == 0)
return null;
var memStream = new MemoryStream();
var writer = new BinaryWriter(memStream);
ulong header64 = (((ulong)numExceptions * 24) << 8) | 0x41;
if (header64 > uint.MaxValue)
throw new ApplicationException("Too many exception handlers...");
writer.Write((uint)header64);
for (int i = 0; i < numExceptions; i++) {
writer.Write(reader.ReadUInt32()); // flags
writer.Write(reader.ReadUInt32()); // try offset
writer.Write(reader.ReadUInt32()); // try length
writer.Write(reader.ReadUInt32()); // handler offset
writer.Write(reader.ReadUInt32()); // handler length
writer.Write(reader.ReadUInt32()); // catch token or filter offset
}
return memStream.ToArray();
}
示例13: Decode
private static FragmentList Decode(IBinaryReader patchReader)
{
var l = new FragmentList();
while(patchReader.BaseStream.Position != patchReader.BaseStream.Length)
{
var start = patchReader.ReadUInt32();
var end = patchReader.ReadUInt32();
var len = patchReader.ReadUInt32();
var data = patchReader.ReadBytes((int)len);
var f = new Fragment {
Start = (int)start,
End = (int)end,
Length = (int)len,
Data = data
};
//Console.WriteLine("chunk:" + start + " " + end + " " + len);
l.Add(f);
}
return l;
}
示例14: ParseSection
static void ParseSection(IBinaryReader reader) {
byte flags;
do {
Align(reader, 4);
flags = reader.ReadByte();
if ((flags & 1) == 0)
throw new InvalidMethodBody("Not an exception section");
if ((flags & 0x3E) != 0)
throw new InvalidMethodBody("Invalid bits set");
if ((flags & 0x40) != 0) {
reader.Position--;
int num = (int)(reader.ReadUInt32() >> 8) / 24;
reader.Position += num * 24;
}
else {
int num = reader.ReadByte() / 12;
reader.Position += 2 + num * 12;
}
} while ((flags & 0x80) != 0);
}
示例15: Decrypt
byte[] Decrypt(IBinaryReader reader) {
try {
reader.Position = 0;
uint sig = reader.ReadUInt32();
reader.Position = 0;
if (sig == 0xBEEFCACE)
return DecryptBeefcace(reader);
if (sig == 0x58455245)
return DecryptErex(reader);
return null;
}
catch (InvalidDataException) {
return null;
}
catch (Exception ex) {
Logger.w("Got an exception when decrypting resources: {0} - {1}", ex.GetType(), ex.Message);
return null;
}
}