change: sorted assembly and type by name before write to symbol mapping file

before-split
walon 2025-05-19 16:25:47 +08:00
parent a4014fe829
commit 5f63818841
1 changed files with 19 additions and 4 deletions

View File

@ -1,5 +1,6 @@
using dnlib.DotNet; using dnlib.DotNet;
using Obfuz.Utils; using Obfuz.Utils;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@ -360,6 +361,13 @@ namespace Obfuz.ObfusPasses.SymbolObfus
type.events.Add(signature, rme); type.events.Add(signature, rme);
} }
private List<V> GetSortedValueList<K, V>(Dictionary<K, V> dic, Comparison<V> comparer)
{
var list = dic.Values.ToList();
list.Sort(comparer);
return list;
}
public void WriteXmlMappingFile() public void WriteXmlMappingFile()
{ {
if (string.IsNullOrEmpty(_mappingFile)) if (string.IsNullOrEmpty(_mappingFile))
@ -369,7 +377,10 @@ namespace Obfuz.ObfusPasses.SymbolObfus
var doc = new XmlDocument(); var doc = new XmlDocument();
var root = doc.CreateElement("mapping"); var root = doc.CreateElement("mapping");
doc.AppendChild(root); doc.AppendChild(root);
foreach (var kvp in _modRenames)
var sortedModRenames = _modRenames.ToList();
sortedModRenames.Sort((a, b) => a.Value.oldName.CompareTo(b.Value.oldName));
foreach (var kvp in sortedModRenames)
{ {
ModuleDef mod = kvp.Key; ModuleDef mod = kvp.Key;
RenameRecord record = kvp.Value; RenameRecord record = kvp.Value;
@ -381,7 +392,9 @@ namespace Obfuz.ObfusPasses.SymbolObfus
} }
root.AppendChild(assemblyNode); root.AppendChild(assemblyNode);
} }
foreach (RenameMappingAssembly ass in _assemblies.Values)
var sortedAsses = GetSortedValueList(_assemblies, (a, b) => a.assName.CompareTo(b.assName));
foreach (RenameMappingAssembly ass in sortedAsses)
{ {
if (_modRenames.Keys.Any(m => m.Assembly.Name == ass.assName)) if (_modRenames.Keys.Any(m => m.Assembly.Name == ass.assName))
{ {
@ -389,9 +402,11 @@ namespace Obfuz.ObfusPasses.SymbolObfus
} }
var assemblyNode = doc.CreateElement("assembly"); var assemblyNode = doc.CreateElement("assembly");
assemblyNode.SetAttribute("name", ass.assName); assemblyNode.SetAttribute("name", ass.assName);
foreach (var e in ass.types)
var sortedTypes = GetSortedValueList(ass.types, (a, b) => a.oldFullName.CompareTo(b.oldFullName));
foreach (var type in sortedTypes)
{ {
WriteTypeMapping(assemblyNode, e.Key, e.Value); WriteTypeMapping(assemblyNode, type.oldFullName, type);
} }
root.AppendChild(assemblyNode); root.AppendChild(assemblyNode);
} }