示例#1
0
        internal PEBuffer AllocBuff()
        {
            var ret = m_freeBuff;

            if (ret == null)
            {
                return(new PEBuffer(m_stream));
            }
            m_freeBuff = null;
            return(ret);
        }
示例#2
0
        public PEFile(string filePath)
        {
            m_stream = File.OpenRead(filePath);
            m_headerBuff = new PEBuffer(m_stream);

            Header = new PEHeader(m_headerBuff.Fetch(0, 512));
            // We did not read in the complete header, Try again using the right sized buffer.  
            if (Header.Size > m_headerBuff.Length)
                Header = new PEHeader(m_headerBuff.Fetch(0, Header.Size));

            if (Header.Size > m_headerBuff.Length)
                throw new InvalidOperationException("Bad PE Header in " + filePath);
        }
示例#3
0
 internal unsafe string GetName(PEBuffer buff, int resourceStartFileOffset)
 {
     if (IsStringName)
     {
         int   nameLen = *((ushort *)buff.Fetch(NameOffset + resourceStartFileOffset, 2));
         char *namePtr = (char *)buff.Fetch(NameOffset + resourceStartFileOffset + 2, nameLen);
         return(new string(namePtr));
     }
     else
     {
         return(Id.ToString());
     }
 }
示例#4
0
        public PEFile(string filePath)
        {
            m_stream     = File.OpenRead(filePath);
            m_headerBuff = new PEBuffer(m_stream);

            Header = new PEHeader(m_headerBuff.Fetch(0, 512));
            // We did not read in the complete header, Try again using the right sized buffer.
            if (Header.Size > m_headerBuff.Length)
            {
                Header = new PEHeader(m_headerBuff.Fetch(0, Header.Size));
            }

            if (Header.Size > m_headerBuff.Length)
            {
                throw new InvalidOperationException("Bad PE Header in " + filePath);
            }
        }
示例#5
0
 internal unsafe string GetName(PEBuffer buff, int resourceStartFileOffset)
 {
     if (IsStringName)
     {
         int nameLen = *((ushort*)buff.Fetch(NameOffset + resourceStartFileOffset, 2));
         char* namePtr = (char*)buff.Fetch(NameOffset + resourceStartFileOffset + 2, nameLen);
         return new string(namePtr);
     }
     else
         return Id.ToString();
 }
示例#6
0
 public byte* FetchData(int offsetInResourceData, int size, PEBuffer buff)
 {
     return buff.Fetch(m_dataFileOffset + offsetInResourceData, size);
 }
示例#7
0
 internal void FreeBuff(PEBuffer buffer)
 {
     m_freeBuff = buffer;
 }
示例#8
0
 internal PEBuffer AllocBuff()
 {
     var ret = m_freeBuff;
     if (ret == null)
         return new PEBuffer(m_stream);
     m_freeBuff = null;
     return ret;
 }
示例#9
0
 internal byte* FetchRVA(int rva, int size, PEBuffer buffer)
 {
     return buffer.Fetch(Header.RvaToFileOffset(rva), size);
 }
示例#10
0
 public byte *FetchData(int offsetInResourceData, int size, PEBuffer buff)
 {
     return(buff.Fetch(m_dataFileOffset + offsetInResourceData, size));
 }
示例#11
0
 internal void FreeBuff(PEBuffer buffer)
 {
     m_freeBuff = buffer;
 }
示例#12
0
 internal byte *FetchRVA(int rva, int size, PEBuffer buffer)
 {
     return(buffer.Fetch(Header.RvaToFileOffset(rva), size));
 }