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; }
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; } }
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; } }
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); }