Exemplo n.º 1
0
 public TagAnalyzer(TagCache cache, HaloTag tag)
 {
     _cache = cache;
     _tag = tag;
     _tagMap = BuildTagMap(tag);
     _dataFixupsByWriteOffset = _tag.DataFixups.ToDictionary(f => f.WriteOffset);
     _resourceFixupsByWriteOffset = _tag.ResourceFixups.ToDictionary(f => f.WriteOffset);
 }
Exemplo n.º 2
0
 /// <summary>
 /// Builds a memory map for a tag.
 /// </summary>
 /// <param name="tag">The tag to build a memory map for.</param>
 /// <returns>The built map.</returns>
 private static MemoryMap BuildTagMap(TagInstance tag)
 {
     // Create a memory map with a boundary at each fixup target
     // and at the main structure
     var result = new MemoryMap(0, (uint)tag.DataSize);
     result.AddBoundary(tag.MainStructOffset);
     result.AddBoundaries(tag.DataFixups.Select(f => f.TargetOffset));
     return result;
 }
 /// <summary>
 /// Builds a memory map for a tag.
 /// </summary>
 /// <param name="data">The tag data to build a memory map for.</param>
 /// <returns>The built map.</returns>
 private static MemoryMap BuildTagMap(TagData data)
 {
     // Create a memory map with a boundary at each fixup target
     // and at the main structure
     var result = new MemoryMap(0, (uint)data.Data.Length);
     result.AddBoundary(data.MainStructOffset);
     result.AddBoundaries(data.PointerFixups.Select(f => f.TargetOffset));
     return result;
 }
Exemplo n.º 4
0
 public TagAnalyzer(TagCache cache, TagInstance tag)
 {
     _cache = cache;
     _tag = tag;
     _tagMap = BuildTagMap(tag);
     _dataFixupsByWriteOffset = _tag.DataFixups.ToDictionary(f => f.WriteOffset);
     _resourceFixupsByWriteOffset = _tag.ResourceFixups.ToDictionary(f => f.WriteOffset);
     foreach (var group in cache.Tags.NonNull().Select(t => t.GroupTag).Distinct())
         _tagGroups.Add(group);
 }
Exemplo n.º 5
0
 public TagLayoutGuess Analyze(TagData data)
 {
     _tagMap = BuildTagMap(data);
     _dataFixupsByWriteOffset = data.PointerFixups.ToDictionary(f => f.WriteOffset);
     _resourceFixupsByWriteOffset = new HashSet<uint>(data.ResourcePointerOffsets);
     using (var reader = new BinaryReader(new MemoryStream(data.Data)))
     {
         reader.BaseStream.Position = data.MainStructOffset;
         return AnalyzeStructure(reader, 1);
     }
 }