Nro.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System.IO;
  2. namespace Ryujinx.HLE.Loaders.Executables
  3. {
  4. class Nro : IExecutable
  5. {
  6. public string FilePath { get; private set; }
  7. public byte[] Text { get; private set; }
  8. public byte[] RO { get; private set; }
  9. public byte[] Data { get; private set; }
  10. public int Mod0Offset { get; private set; }
  11. public int TextOffset { get; private set; }
  12. public int ROOffset { get; private set; }
  13. public int DataOffset { get; private set; }
  14. public int BssSize { get; private set; }
  15. public long SourceAddress { get; private set; }
  16. public long BssAddress { get; private set; }
  17. public Nro(Stream Input, string FilePath, long SourceAddress = 0, long BssAddress = 0)
  18. {
  19. this.FilePath = FilePath;
  20. this.SourceAddress = SourceAddress;
  21. this.BssAddress = BssAddress;
  22. BinaryReader Reader = new BinaryReader(Input);
  23. Input.Seek(4, SeekOrigin.Begin);
  24. int Mod0Offset = Reader.ReadInt32();
  25. int Padding8 = Reader.ReadInt32();
  26. int Paddingc = Reader.ReadInt32();
  27. int NroMagic = Reader.ReadInt32();
  28. int Unknown14 = Reader.ReadInt32();
  29. int FileSize = Reader.ReadInt32();
  30. int Unknown1c = Reader.ReadInt32();
  31. int TextOffset = Reader.ReadInt32();
  32. int TextSize = Reader.ReadInt32();
  33. int ROOffset = Reader.ReadInt32();
  34. int ROSize = Reader.ReadInt32();
  35. int DataOffset = Reader.ReadInt32();
  36. int DataSize = Reader.ReadInt32();
  37. int BssSize = Reader.ReadInt32();
  38. this.Mod0Offset = Mod0Offset;
  39. this.TextOffset = TextOffset;
  40. this.ROOffset = ROOffset;
  41. this.DataOffset = DataOffset;
  42. this.BssSize = BssSize;
  43. byte[] Read(long Position, int Size)
  44. {
  45. Input.Seek(Position, SeekOrigin.Begin);
  46. return Reader.ReadBytes(Size);
  47. }
  48. Text = Read(TextOffset, TextSize);
  49. RO = Read(ROOffset, ROSize);
  50. Data = Read(DataOffset, DataSize);
  51. }
  52. }
  53. }