using System; namespace Packaging.Targets.Rpm { /// /// Provides methods for working with ELF files. /// internal static class ElfFile { /// /// Determines whether a file is an ELF file or not. /// /// /// An array containing at least the first 4 bytes of the file. /// /// /// if the file is an ELF file; otherwise, . /// internal static bool IsElfFile(byte[] header) { return header.Length > 4 && header[0] == 0x7f && header[1] == 0x45 && header[2] == 0x4c && header[3] == 0x46; } /// /// Reads the of an ELF file. /// /// /// An array containing at least the first 0x14 bytes of the file. /// /// /// A object represening the ELF file header. /// internal static ElfHeader ReadHeader(byte[] header) { if (!IsElfFile(header)) { throw new InvalidOperationException(); } ElfHeader value = default(ElfHeader); value.@class = (ElfClass)header[4]; value.data = header[5]; value.version = header[6]; value.osAbi = header[7]; value.abiVersion = header[8]; value.type = (ElfType)BitConverter.ToInt16(header, 0x10); value.machine = (ElfMachine)BitConverter.ToInt16(header, 0x12); return value; } } }