public void SetBaseOffset(int baseOffset)
 {
     foreach (Pointer p in _lPointers)
     {
         // Our example label is SEQ_STUFF at the binary offset 0x1000, curBaseOffset is 0x500, baseOffset is 0x1800
         // There is a pointer (p) to SEQ_STUFF at the binary offset 0x1DFC
         int    oldPointer      = EndianBitConverter.BytesToInt32(Binary, p.BinaryOffset, Endianness);   // If there was a pointer to "SEQ_STUFF+4", the pointer would be 0x1504, at binary offset 0x1DFC
         int    labelOffset     = oldPointer - BaseOffset;                                               // Then labelOffset is 0x1004 (SEQ_STUFF+4)
         byte[] newPointerBytes = EndianBitConverter.Int32ToBytes(baseOffset + labelOffset, Endianness); // b will contain {0x04, 0x28, 0x00, 0x00} [0x2804] (SEQ_STUFF+4 + baseOffset)
         for (int i = 0; i < 4; i++)
         {
             _bytes[p.BinaryOffset + i] = newPointerBytes[i]; // Copy the new pointer to binary offset 0x1DF4
         }
     }
     BaseOffset = baseOffset;
 }
Exemple #2
0
 public DLSID(byte[] data)
 {
     if (data is null)
     {
         throw new ArgumentNullException(nameof(data));
     }
     if (data.Length != 16)
     {
         throw new ArgumentOutOfRangeException(nameof(data.Length));
     }
     Data1 = (uint)EndianBitConverter.BytesToInt32(data, 0, Endianness.LittleEndian);
     Data2 = (ushort)EndianBitConverter.BytesToInt16(data, 4, Endianness.LittleEndian);
     Data3 = (ushort)EndianBitConverter.BytesToInt16(data, 6, Endianness.LittleEndian);
     Data4 = new byte[8];
     for (int i = 0; i < 8; i++)
     {
         Data4[i] = data[8 + i];
     }
 }