修复symbol mapping文件时输出内容顺序不稳定的问题
parent
58ad0fca67
commit
8bd2aab9da
|
@ -374,37 +374,33 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
var root = doc.CreateElement("mapping");
|
var root = doc.CreateElement("mapping");
|
||||||
doc.AppendChild(root);
|
doc.AppendChild(root);
|
||||||
|
|
||||||
var sortedModRenames = _modRenames.ToList();
|
var totalAssNames = _modRenames.Keys.Select(m => m.Assembly.Name.ToString()).Concat(_assemblies.Keys).ToHashSet().ToList();
|
||||||
sortedModRenames.Sort((a, b) => a.Value.oldName.CompareTo(b.Value.oldName));
|
totalAssNames.Sort((a, b) => a.CompareTo(b));
|
||||||
foreach (var kvp in sortedModRenames)
|
foreach (string assName in totalAssNames)
|
||||||
{
|
{
|
||||||
ModuleDef mod = kvp.Key;
|
ModuleDef mod = _modRenames.Keys.FirstOrDefault(m => m.Assembly.Name == assName);
|
||||||
RenameRecord record = kvp.Value;
|
|
||||||
var assemblyNode = doc.CreateElement("assembly");
|
var assemblyNode = doc.CreateElement("assembly");
|
||||||
assemblyNode.SetAttribute("name", mod.Assembly.Name);
|
assemblyNode.SetAttribute("name", assName);
|
||||||
foreach (TypeDef type in mod.GetTypes())
|
root.AppendChild(assemblyNode);
|
||||||
|
if (mod != null)
|
||||||
|
{
|
||||||
|
var types = mod.GetTypes().ToDictionary(t => _typeRenames.TryGetValue(t, out var rec) ? rec.oldName : t.FullName, t => t);
|
||||||
|
var sortedTypes = new SortedDictionary<string, TypeDef>(types);
|
||||||
|
foreach (TypeDef type in sortedTypes.Values)
|
||||||
{
|
{
|
||||||
WriteTypeMapping(assemblyNode, type);
|
WriteTypeMapping(assemblyNode, type);
|
||||||
}
|
}
|
||||||
root.AppendChild(assemblyNode);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
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))
|
RenameMappingAssembly ass = _assemblies[assName];
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
var assemblyNode = doc.CreateElement("assembly");
|
|
||||||
assemblyNode.SetAttribute("name", ass.assName);
|
|
||||||
|
|
||||||
var sortedTypes = GetSortedValueList(ass.types, (a, b) => a.oldFullName.CompareTo(b.oldFullName));
|
var sortedTypes = GetSortedValueList(ass.types, (a, b) => a.oldFullName.CompareTo(b.oldFullName));
|
||||||
foreach (var type in sortedTypes)
|
foreach (var type in sortedTypes)
|
||||||
{
|
{
|
||||||
WriteTypeMapping(assemblyNode, type.oldFullName, type);
|
WriteTypeMapping(assemblyNode, type.oldFullName, type);
|
||||||
}
|
}
|
||||||
root.AppendChild(assemblyNode);
|
}
|
||||||
}
|
}
|
||||||
Directory.CreateDirectory(Path.GetDirectoryName(_mappingFile));
|
Directory.CreateDirectory(Path.GetDirectoryName(_mappingFile));
|
||||||
doc.Save(_mappingFile);
|
doc.Save(_mappingFile);
|
||||||
|
|
Loading…
Reference in New Issue