本文整理汇总了C#中EndianBinaryReader.ReadUInt64方法的典型用法代码示例。如果您正苦于以下问题:C# EndianBinaryReader.ReadUInt64方法的具体用法?C# EndianBinaryReader.ReadUInt64怎么用?C# EndianBinaryReader.ReadUInt64使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类EndianBinaryReader
的用法示例。
在下文中一共展示了EndianBinaryReader.ReadUInt64方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ReadSegmentHeader
//
/// <summary>
/// Read the segment header from the program header table
/// </summary>
private ELF_SegmentHeader ReadSegmentHeader(UInt32 index)
{
EndianBinaryReader ebr = new EndianBinaryReader(binFile, endian);
ELF_SegmentHeader segmentHeader = new ELF_SegmentHeader();
// Seek to the start of the section header in section header table
binFile.Seek((Int64)(hdr.e_phentsize * index + hdr.e_phoff), SeekOrigin.Begin);
//Debug.DebugMSG( "Segment["+index+"] = \n{");
// Read segment type
segmentHeader.p_type = (ELF_SegmentType) ebr.ReadUInt32();
//Debug.DebugMSG( " Segment Type : " + segmentHeader.p_type);
if (ELF_FileClass.ELFCLASS_32 == hdr.e_ident.fileClass)
{
segmentHeader.p_offset = (UInt64) ebr.ReadUInt32();
segmentHeader.p_vaddr = (UInt64) ebr.ReadUInt32();
segmentHeader.p_paddr = (UInt64) ebr.ReadUInt32();
segmentHeader.p_filesz = (UInt64) ebr.ReadUInt32();
segmentHeader.p_memsz = (UInt64) ebr.ReadUInt32();
segmentHeader.p_flags = (UInt32) ebr.ReadUInt32();
segmentHeader.p_align = (UInt64) ebr.ReadUInt32();
/*
Debug.DebugMSG( " Segment Flags : 0x" + segmentHeader.p_flags.ToString("X8"));
Debug.DebugMSG( " Segment Offset : 0x" + segmentHeader.p_offset.ToString("X8"));
Debug.DebugMSG( " Segment Virtual Address : 0x" + segmentHeader.p_vaddr.ToString("X8"));
Debug.DebugMSG( " Segment Physical Address : 0x" + segmentHeader.p_paddr.ToString("X8"));
Debug.DebugMSG( " Segment File Size : 0x" + segmentHeader.p_filesz.ToString("X8"));
Debug.DebugMSG( " Segment Memory Size : 0x" + segmentHeader.p_memsz.ToString("X8"));
Debug.DebugMSG( " Segment Align : 0x" + segmentHeader.p_align.ToString("X8"));
*/
}
else
{
segmentHeader.p_flags = (UInt32) ebr.ReadUInt32();
segmentHeader.p_offset = (UInt64) ebr.ReadUInt64();
segmentHeader.p_vaddr = (UInt64) ebr.ReadUInt64();
segmentHeader.p_paddr = (UInt64) ebr.ReadUInt64();
segmentHeader.p_filesz = (UInt64) ebr.ReadUInt64();
segmentHeader.p_memsz = (UInt64) ebr.ReadUInt64();
segmentHeader.p_align = (UInt64) ebr.ReadUInt64();
/*
Debug.DebugMSG( " Segment Flags : 0x" + segmentHeader.p_flags.ToString("X8"));
Debug.DebugMSG( " Segment Offset : 0x" + segmentHeader.p_offset.ToString("X16"));
Debug.DebugMSG( " Segment Virtual Address : 0x" + segmentHeader.p_vaddr.ToString("X16"));
Debug.DebugMSG( " Segment Physical Address : 0x" + segmentHeader.p_paddr.ToString("X16"));
Debug.DebugMSG( " Segment File Size : 0x" + segmentHeader.p_filesz.ToString("X16"));
Debug.DebugMSG( " Segment Memory Size : 0x" + segmentHeader.p_memsz.ToString("X16"));
Debug.DebugMSG( " Segment Align : 0x" + segmentHeader.p_align.ToString("X16"));
*/
}
//Debug.DebugMSG( "}" );
return segmentHeader;
}
示例2: ParseELFHeader
public static ELF_Header ParseELFHeader(Stream fs)
{
ELF_Header hdr;
// Read ELF Header
fs.Seek(0, SeekOrigin.Begin);
BinaryReader br = new BinaryReader(fs);
hdr.e_ident.magic = br.ReadBytes(4);
hdr.e_ident.fileClass = (ELF_FileClass) br.ReadByte();
hdr.e_ident.dataEncoding = (ELF_DataEncoding) br.ReadByte();
hdr.e_ident.fileVersion = (ELF_FileVersion) br.ReadByte();
hdr.e_ident.osAbiID = (ELF_OsAbiID) br.ReadByte();
hdr.e_ident.abiVersion = br.ReadByte();
hdr.e_ident.pad = br.ReadBytes(7);
if ( (0x7F != hdr.e_ident.magic[0]) ||
('E' != hdr.e_ident.magic[1]) ||
('L' != hdr.e_ident.magic[2]) ||
('F' != hdr.e_ident.magic[3]) )
{
throw new Exception("ELF magic number not found. Not an ELF object file.");
}
if ( (ELF_FileClass.ELFCLASS_32 != hdr.e_ident.fileClass) &&
(ELF_FileClass.ELFCLASS_64 != hdr.e_ident.fileClass) )
{
throw new Exception("Invalid ELF class. Not a valid ELF object file.");
}
if ( (ELF_DataEncoding.ELFDATA_2LSB != hdr.e_ident.dataEncoding) &&
(ELF_DataEncoding.ELFDATA_2MSB != hdr.e_ident.dataEncoding) )
{
throw new Exception("Invalid ELF encoding. Not a valid ELF object file.");
}
if ( (ELF_FileVersion.ELFVER_CURRENT != hdr.e_ident.fileVersion) )
{
throw new Exception("Invalid ELF file version. Not a valid ELF object file.");
}
Debug.DebugMSG("ELF Identifier = \n{");
Debug.DebugMSG(" magic[0] : 0x" + hdr.e_ident.magic[0].ToString("X2"));
Debug.DebugMSG(" magic[1] : 0x" + hdr.e_ident.magic[1].ToString("X2"));
Debug.DebugMSG(" magic[2] : 0x" + hdr.e_ident.magic[2].ToString("X2"));
Debug.DebugMSG(" magic[3] : 0x" + hdr.e_ident.magic[3].ToString("X2"));
Debug.DebugMSG(" fileClass : " + hdr.e_ident.fileClass);
Debug.DebugMSG(" dataEncoding : " + hdr.e_ident.dataEncoding);
Debug.DebugMSG(" fileVersion : " + hdr.e_ident.fileVersion);
Debug.DebugMSG(" OS/ABI ID : " + hdr.e_ident.osAbiID);
Debug.DebugMSG(" ABIVersion : " + hdr.e_ident.abiVersion);
Debug.DebugMSG("}\n\n");
// Now that we have read and parsed the ELF Identifier array,
// we have enough info to get the rest of the header and
// correctly parse entire file
Endian endian = (ELF_DataEncoding.ELFDATA_2LSB == hdr.e_ident.dataEncoding) ? Endian.LittleEndian : Endian.BigEndian;
EndianBinaryReader ebr = new EndianBinaryReader(fs,endian);
hdr.e_type = (ELF_Type) ebr.ReadUInt16();
hdr.e_machine = (ELF_Machine) ebr.ReadUInt16();
hdr.e_version = (ELF_Version) ebr.ReadUInt32();
Debug.DebugMSG( "ELF Type : " + hdr.e_type);
Debug.DebugMSG( "ELF Machine : " + hdr.e_machine);
Debug.DebugMSG( "ELF Version : " + hdr.e_version);
// FIXME: Do we need this check? Is it a good idea?
if (ELF_Type.ELFTYPE_EXEC != hdr.e_type)
{
throw new Exception("ELF file type is wrong - not a valid ELF executable.");
}
// Read entry point and program header and section header offsets
// The size of these values is class dependent (32- or 64-bit)
if (ELF_FileClass.ELFCLASS_32 == hdr.e_ident.fileClass)
{
hdr.e_entry = (UInt64) ebr.ReadUInt32();
hdr.e_phoff = (UInt64) ebr.ReadUInt32();
hdr.e_shoff = (UInt64) ebr.ReadUInt32();
Debug.DebugMSG( "ELF Entry Point : 0x" + hdr.e_entry.ToString("X8"));
Debug.DebugMSG( "ELF Program Header Offset : 0x" + hdr.e_phoff.ToString("X8"));
Debug.DebugMSG( "ELF Section Header Table Offset : 0x" + hdr.e_shoff.ToString("X8"));
}
else
{
hdr.e_entry = ebr.ReadUInt64();
hdr.e_phoff = ebr.ReadUInt64();
hdr.e_shoff = ebr.ReadUInt64();
Debug.DebugMSG( "ELF Entry Point : 0x" + hdr.e_entry.ToString("X16"));
Debug.DebugMSG( "ELF Program Header Offset : 0x" + hdr.e_phoff.ToString("X16"));
Debug.DebugMSG( "ELF Section Header Table Offset : 0x" + hdr.e_shoff.ToString("X16"));
}
hdr.e_flags = ebr.ReadUInt32();
hdr.e_ehsize = ebr.ReadUInt16();
hdr.e_phentsize = ebr.ReadUInt16();
hdr.e_phnum = ebr.ReadUInt16();
//.........这里部分代码省略.........
示例3: ReadSectionHeader
/// <summary>
/// Read the section header from the section header table
/// </summary>
private ELF_SectionHeader ReadSectionHeader(UInt32 index)
{
EndianBinaryReader ebr = new EndianBinaryReader(binFile, endian);
ELF_SectionHeader sectionHeader = new ELF_SectionHeader();
// Seek to the start of the section header in section header table
binFile.Seek((Int64)(hdr.e_shentsize * index + hdr.e_shoff), SeekOrigin.Begin);
//Debug.DebugMSG( "Section["+index+"] = \n{");
sectionHeader.sh_name = ebr.ReadUInt32();
sectionHeader.sh_type = (ELF_SectionType) ebr.ReadUInt32();
//Debug.DebugMSG( " Section Name Index : " + sectionHeader.sh_name);
//Debug.DebugMSG( " Section Type : " + sectionHeader.sh_type);
if (ELF_FileClass.ELFCLASS_32 == hdr.e_ident.fileClass)
{
sectionHeader.sh_flags = (UInt64) ebr.ReadUInt32();
sectionHeader.sh_addr = (UInt64) ebr.ReadUInt32();
sectionHeader.sh_offset = (UInt64) ebr.ReadUInt32();
sectionHeader.sh_size = (UInt64) ebr.ReadUInt32();
/*Debug.DebugMSG( " Section Flags : 0x" + sectionHeader.sh_flags.ToString("X8"));
Debug.DebugMSG( " Section Address : 0x" + sectionHeader.sh_addr.ToString("X8"));
Debug.DebugMSG( " Section Offset : 0x" + sectionHeader.sh_offset.ToString("X8"));
Debug.DebugMSG( " Section Size : 0x" + sectionHeader.sh_size.ToString("X8"));*/
}
else
{
sectionHeader.sh_flags = ebr.ReadUInt64();
sectionHeader.sh_addr = ebr.ReadUInt64();
sectionHeader.sh_offset = ebr.ReadUInt64();
sectionHeader.sh_size = ebr.ReadUInt64();
/*Debug.DebugMSG( " Section Flags : 0x" + sectionHeader.sh_flags.ToString("X16"));
Debug.DebugMSG( " Section Address : 0x" + sectionHeader.sh_addr.ToString("X16"));
Debug.DebugMSG( " Section Offset : 0x" + sectionHeader.sh_offset.ToString("X16"));
Debug.DebugMSG( " Section Size : 0x" + sectionHeader.sh_size.ToString("X16"));*/
}
sectionHeader.sh_link = ebr.ReadUInt32();
sectionHeader.sh_info = ebr.ReadUInt32();
//Debug.DebugMSG( " Section Link Index : 0x" + sectionHeader.sh_flags.ToString("X8"));
//Debug.DebugMSG( " Section Info Field : 0x" + sectionHeader.sh_addr.ToString("X8"));
if (ELF_FileClass.ELFCLASS_32 == hdr.e_ident.fileClass)
{
sectionHeader.sh_addralign = (UInt64) ebr.ReadUInt32();
sectionHeader.sh_entsize = (UInt64) ebr.ReadUInt32();
//Debug.DebugMSG( " Section Addr Aligmnent : 0x" + sectionHeader.sh_addralign.ToString("X8"));
//Debug.DebugMSG( " Section Entry Size : 0x" + sectionHeader.sh_entsize.ToString("X8"));
}
else
{
sectionHeader.sh_addralign = ebr.ReadUInt64();
sectionHeader.sh_entsize = ebr.ReadUInt64();
//Debug.DebugMSG( " Section Addr Aligmnent : 0x" + sectionHeader.sh_addralign.ToString("X16"));
//Debug.DebugMSG( " Section Entry Size : 0x" + sectionHeader.sh_entsize.ToString("X16"));
}
//Debug.DebugMSG("}");
return sectionHeader;
}
示例4: ParseSymbolTable
/// <summary>
/// Parse the ELF file's symbol table.
/// </summary>
private void ParseSymbolTable()
{
EndianBinaryReader ebr = new EndianBinaryReader(binFile, endian);
UInt32 numSymbols = (UInt32) headerRef["numEntriesInSymTable"];
ELF_Symbol sym;
Byte info, other;
symRef = new Hashtable[numSymbols];
// Read the symbol table
for (UInt32 symNum = 0; symNum < numSymbols; symNum++)
{
symRef[symNum] = new Hashtable();
// Go to current symbol
ebr.BaseStream.Seek((Int64) ((UInt64)headerRef["symbolTableAddr"]) + ((UInt32)headerRef["symbolTableEntrySize"] * symNum),SeekOrigin.Begin);
sym.st_name = (UInt32) ebr.ReadUInt32();
if (ELF_FileClass.ELFCLASS_32 == hdr.e_ident.fileClass)
{
sym.st_value = (UInt64) ebr.ReadUInt32();
sym.st_size = (UInt64) ebr.ReadUInt32();
info = ebr.ReadByte();
other = ebr.ReadByte();
sym.st_shndx = ebr.ReadUInt16();
}
else
{
info = ebr.ReadByte();
other = ebr.ReadByte();
sym.st_shndx = ebr.ReadUInt16();
sym.st_value = ebr.ReadUInt64();
sym.st_size = ebr.ReadUInt64();
}
sym.st_type = (ELF_SymbolType) (info & 0xF);
sym.st_binding = (ELF_SymbolBinding) ((info >> 4) & 0xF);
sym.st_visibility = (ELF_SymbolVisibility) (other & 0x3);
/*
Debug.DebugMSG( "Symbol[" + symNum + "] = \n{" );
Debug.DebugMSG( " Symbol Name Offset : 0x" + sym.st_name.ToString("X8"));
Debug.DebugMSG( " Symbol Value : 0x" + sym.st_value.ToString("X16"));
Debug.DebugMSG( " Symbol Size : 0x" + sym.st_size.ToString("X16"));
Debug.DebugMSG( " Symbol Type : " + sym.st_type);
Debug.DebugMSG( " Symbol Binding : " + sym.st_binding);
Debug.DebugMSG( " Symbol Visibility : " + sym.st_visibility);
Debug.DebugMSG( " Symbol's Relevant Section : 0x" + sym.st_shndx.ToString("X4"));
Debug.DebugMSG( "}\n");
*/
// Move to name in String Table
ebr.BaseStream.Seek( (Int64) ((UInt64)headerRef["stringTableAddr"]) + (sym.st_name), SeekOrigin.Begin);
symRef[symNum]["name"] = ELF_getStringFromStringTable();
Debug.DebugMSG("symRef[" + symNum.ToString() + "][\"name\"]: " + ((String)symRef[symNum]["name"]).ToString());
symRef[symNum]["value"] = sym.st_value;
Debug.DebugMSG("symRef[" + symNum.ToString() + "][\"value\"]: " + ((UInt64)symRef[symNum]["value"]).ToString("X8"));
symRef[symNum]["secNum"] = sym.st_shndx;
Debug.DebugMSG("symRef[" + symNum.ToString() + "][\"secNum\"]: " + ((UInt16)symRef[symNum]["secNum"]).ToString("X4"));
symRef[symNum]["type"] = sym.st_type;
Debug.DebugMSG("symRef[" + symNum.ToString() + "][\"type\"]: " + sym.st_type);
symRef[symNum]["binding"] = sym.st_binding;
Debug.DebugMSG("symRef[" + symNum.ToString() + "][\"binding\"]: " + sym.st_binding);
symRef[symNum]["visibility"] = sym.st_visibility;
Debug.DebugMSG("symRef[" + symNum.ToString() + "][\"visibility\"]: " + sym.st_visibility);
}
Debug.DebugMSG("Parse Symbol Table Done");
}
示例5: Load
public void Load(Stream inputStream)
{
this.SetInternalStream(inputStream);
DisposeLevels();
_zoomLevels.Clear();
_reader = new EndianBinaryReader(EndianBitConverter.Little, inputStream);
// Check magic bytes
if (_reader.ReadInt64() != 0x08002b4949)
throw new Exception("Invalid ZIF file");
while (_reader.BaseStream.Position < MAX_ZIF_BYTES)
{
ulong offset = _reader.ReadUInt64();
if (offset == 0)
break;
_reader.Seek(offset, SeekOrigin.Begin);
var numTags = _reader.ReadUInt64();
var level = new ZoomLevel(_reader);
for (ulong i = 0; i < numTags; ++i)
{
var key = _reader.ReadUInt16();
var notUsed = _reader.ReadUInt16();
var val1 = _reader.ReadUInt64();
var val2 = _reader.ReadUInt64();
level.AddTag(key, val1, val2);
}
_zoomLevels.Insert(0, level);
}
}
示例6: Extract
static void Extract(string FileName, EndianBinary.Endian Endian)
{
FileStream Input = new FileStream(FileName, FileMode.Open);
EndianBinaryReader Reader = new EndianBinaryReader(Input, Endian);
byte b = Reader.ReadByte();
MemoryStream SignatureBuffer = new MemoryStream();
while (b != 0)
{
SignatureBuffer.WriteByte(b);
b = Reader.ReadByte();
}
string Signature = Encoding.ASCII.GetString(SignatureBuffer.ToArray());
SignatureBuffer.Dispose();
Reader.BaseStream.Seek(8, SeekOrigin.Begin); //Pula parte da assinatura
if (Signature != "MSSG")
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Invalid file!");
Console.ResetColor();
}
string OutDir = Path.GetFileNameWithoutExtension(FileName);
Directory.CreateDirectory(OutDir);
ulong FileCount = Reader.ReadUInt64();
ulong FileLength = Reader.ReadUInt64();
Reader.ReadUInt64(); //??? 0x800
for (ulong Entry = 0; Entry < FileCount; Entry++)
{
Input.Seek((long)(0x20 + Entry * 0x20), SeekOrigin.Begin);
ulong Offset = Reader.ReadUInt64();
ulong Length1 = Reader.ReadUInt64();
ulong Length2 = Reader.ReadUInt64();
Reader.ReadUInt64(); //Padding
Input.Seek((long)Offset, SeekOrigin.Begin);
byte[] Buffer = new byte[Length1];
Reader.Read(Buffer, 0, Buffer.Length);
string SubFileSignature = Encoding.ASCII.GetString(Buffer, 0, 4);
bool IsLangFile = SubFileSignature == "LANG";
File.WriteAllBytes(Path.Combine(OutDir, "file_" + Entry.ToString() + (IsLangFile ? ".lang" : ".bin")), Buffer);
}
Reader.Close();
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Extracted all files from " + Path.GetFileName(FileName) + "!");
Console.ResetColor();
}
示例7: ParseMessage
private LifxResponse ParseMessage(byte[] packet)
{
using (var ms = new MemoryStream(packet))
{
var header = new FrameHeader();
using (var reader = new EndianBinaryReader(EndianBitConverter.Little, ms, Encoding.UTF8))
{
//frame
var size = reader.ReadUInt16();
if (packet.Length != size || size < 36)
{
throw new Exception("Invalid packet");
}
var a = reader.ReadUInt16(); //origin:2, reserved:1, addressable:1, protocol:12
var source = reader.ReadUInt32();
//frame address
header.TargetMacAddress = reader.ReadBytes(8);
ms.Seek(6, SeekOrigin.Current); //skip reserved
var b = reader.ReadByte(); //reserved:6, ack_required:1, res_required:1,
header.Sequence = reader.ReadByte();
//protocol header
var nanoseconds = reader.ReadUInt64();
header.AtTime = Utilities.Epoch.AddMilliseconds(nanoseconds * 0.000001);
var type = (MessageType)reader.ReadUInt16();
ms.Seek(2, SeekOrigin.Current); //skip reserved
byte[] payload = null;
if (size > 36)
{
payload = reader.ReadBytes(size - 36);
}
return LifxResponse.Create(header, type, source, payload);
}
}
}