Beispiel #1
0
        internal DirectoryEntry(IoMemory mem, ref int offset)
        {
            if (offset + 8 > mem.Length)
            {
                Error.AccessOutOfRange();
            }

            virtualAddress = mem.Read32Unchecked(offset + 0);
            size           = mem.Read32Unchecked(offset + 4);
            offset        += 8;
        }
 internal ImportDescriptor(IoMemory mem, ref int offset)
 {
     if (offset + 20 > mem.Length)
     {
         Error.AccessOutOfRange();
     }
     this.characteristics = mem.Read32Unchecked(offset + 0);
     this.timeDateStamp   = mem.Read32Unchecked(offset + 4);
     this.forwarderChain  = mem.Read32Unchecked(offset + 8);
     this.name            = mem.Read32Unchecked(offset + 12);
     this.firstChunk      = mem.Read32Unchecked(offset + 16);
     offset += 20;
 }
Beispiel #3
0
 internal SectionHeader(IoMemory mem, ref int offset)
 {
     if (offset + 40 > mem.Length)
     {
         Error.AccessOutOfRange();
     }
     name             = mem.ReadAsciiZeroString(offset, 8);
     virtualSize      = mem.Read32Unchecked(offset + 8);
     virtualAddress   = mem.Read32Unchecked(offset + 12);
     sizeOfRawData    = mem.Read32Unchecked(offset + 16);
     pointerToRawData = mem.Read32Unchecked(offset + 20);
     characteristics  = mem.Read32Unchecked(offset + 36);
     offset          += 40;
 }
            internal readonly uint AddressOfOrdinals;       // RVA from base of image

            internal ExportDirectory(IoMemory mem, int offset)
            {
                if (offset + 40 > mem.Length)
                {
                    Error.AccessOutOfRange();
                }
                Characteristics    = mem.Read32Unchecked(offset + 0);
                NumberOfFunctions  = mem.Read32Unchecked(offset + 20);
                NumberOfNames      = mem.Read32Unchecked(offset + 24);
                AddressOfFunctions = mem.Read32Unchecked(offset + 28);
                AddressOfNames     = mem.Read32Unchecked(offset + 32);
                AddressOfOrdinals  = mem.Read32Unchecked(offset + 36);

                if (AddressOfFunctions + 4 * NumberOfFunctions > mem.Length ||
                    AddressOfOrdinals + 2 * NumberOfFunctions > mem.Length ||
                    AddressOfNames + 4 * NumberOfFunctions > mem.Length)
                {
                    Error.AccessOutOfRange();
                }
            }