示例#1
0
        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);
        }
示例#2
0
 public NrrInfo(ulong nrrAddress, NrrHeader header, List <byte[]> hashes)
 {
     NrrAddress = nrrAddress;
     Header     = header;
     Hashes     = hashes;
 }