Exemplo n.º 1
0
 public ResourceTypeCollection(byte [] bytes, uint offset, uint size)
 {
     this.bytes      = bytes;
     rsrcTypeListOff = offset + MemoryArea.ReadBeUInt16(bytes, offset + 0x18) + 2u;
     rsrcNameListOff = offset + MemoryArea.ReadBeUInt16(bytes, offset + 0x1A);
     crsrcTypes      = MemoryArea.ReadBeUInt16(bytes, offset + 0x1C) + 1;
 }
Exemplo n.º 2
0
            public IEnumerator <ResourceReference> GetEnumerator()
            {
                var offset = this.offset;

                for (int i = 0; i < count; ++i)
                {
                    ushort rsrcID  = MemoryArea.ReadBeUInt16(bytes, offset);
                    string name    = ReadName(MemoryArea.ReadBeUInt16(bytes, offset + 2));
                    uint   dataOff = MemoryArea.ReadBeUInt32(bytes, offset + 4) & 0x00FFFFFFU;
                    yield return(new ResourceReference(rsrcID, name, dataOff));

                    offset += 0x0C;
                }
            }
Exemplo n.º 3
0
            public IEnumerator <ResourceType> GetEnumerator()
            {
                var offset = rsrcTypeListOff;

                for (int i = 0; i < crsrcTypes; ++i)
                {
                    string rsrcTypeName            = Encoding.ASCII.GetString(bytes, (int)offset, 4);
                    int    crsrc                   = MemoryArea.ReadBeUInt16(bytes, offset + 4) + 1;
                    uint   rsrcReferenceListOffset = rsrcTypeListOff + MemoryArea.ReadBeUInt16(bytes, offset + 6) - 2;
                    yield return(new ResourceType(bytes, rsrcTypeName, rsrcReferenceListOffset, rsrcNameListOff, crsrc));

                    offset += 8;
                }
            }
Exemplo n.º 4
0
        public override Address ReadStub(Address addrStub, MemoryArea mem)
        {
            var offsetInSection = (uint)(addrStub - mem.BaseAddress);
            var opcode          = mem.ReadBeUInt16(offsetInSection);

            // Expect move.l offset(pc),a0
            if (opcode != 0x207B)
            {
                return(null);
            }
            var offsetToGotEntry = mem.ReadBeInt32(offsetInSection + 4);
            var addrGotEntry     = addrStub + 2 + offsetToGotEntry;

            return(addrGotEntry);
        }