private ResultCode ParseNrr(out NrrInfo nrrInfo, ServiceCtx context, ulong nrrAddress, ulong nrrSize) { nrrInfo = null; if (nrrSize == 0 || nrrAddress + nrrSize <= nrrAddress || (nrrSize & 0xFFF) != 0) { return(ResultCode.InvalidSize); } else if ((nrrAddress & 0xFFF) != 0) { return(ResultCode.InvalidAddress); } StructReader reader = new StructReader(_owner.CpuMemory, nrrAddress); NrrHeader header = reader.Read <NrrHeader>(); if (header.Magic != NrrMagic) { return(ResultCode.InvalidNrr); } else if (header.NrrSize != nrrSize) { return(ResultCode.InvalidSize); } List <byte[]> hashes = new List <byte[]>(); for (int i = 0; i < header.HashCount; i++) { byte[] temp = new byte[0x20]; _owner.CpuMemory.Read(nrrAddress + header.HashOffset + (uint)(i * 0x20), temp); hashes.Add(temp); } nrrInfo = new NrrInfo((ulong)nrrAddress, header, hashes); return(ResultCode.Success); }
public NrrInfo(ulong nrrAddress, NrrHeader header, List <byte[]> hashes) { NrrAddress = nrrAddress; Header = header; Hashes = hashes; }