RenameMethod时检查CustomAttribute
parent
882047eb6c
commit
e0da3da2bc
|
@ -1,4 +1,5 @@
|
||||||
using dnlib.DotNet;
|
using dnlib.DotNet;
|
||||||
|
using NUnit.Framework;
|
||||||
using Obfuz.Utils;
|
using Obfuz.Utils;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
@ -407,6 +408,10 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
typeNode.SetAttribute("fullName", record?.signature ?? type.FullName);
|
typeNode.SetAttribute("fullName", record?.signature ?? type.FullName);
|
||||||
typeNode.SetAttribute("newFullName", record != null && record.status == RenameStatus.Renamed ? record.newName : "");
|
typeNode.SetAttribute("newFullName", record != null && record.status == RenameStatus.Renamed ? record.newName : "");
|
||||||
typeNode.SetAttribute("status", record != null ? record.status.ToString() : RenameStatus.NotRenamed.ToString());
|
typeNode.SetAttribute("status", record != null ? record.status.ToString() : RenameStatus.NotRenamed.ToString());
|
||||||
|
if (record != null && record.status == RenameStatus.Renamed)
|
||||||
|
{
|
||||||
|
Assert.IsFalse(string.IsNullOrWhiteSpace(record.newName), "New name for type cannot be null or empty when status is Renamed.");
|
||||||
|
}
|
||||||
|
|
||||||
foreach (FieldDef field in type.Fields)
|
foreach (FieldDef field in type.Fields)
|
||||||
{
|
{
|
||||||
|
@ -622,6 +627,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
if (_typeRenames.TryGetValue(type, out var record) && record.renameMappingData != null)
|
if (_typeRenames.TryGetValue(type, out var record) && record.renameMappingData != null)
|
||||||
{
|
{
|
||||||
var rmt = (RenameMappingType)record.renameMappingData;
|
var rmt = (RenameMappingType)record.renameMappingData;
|
||||||
|
Assert.IsFalse(string.IsNullOrWhiteSpace(rmt.newFullName));
|
||||||
(newNamespace, newName) = MetaUtil.SplitNamespaceAndName(rmt.newFullName);
|
(newNamespace, newName) = MetaUtil.SplitNamespaceAndName(rmt.newFullName);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -396,6 +396,20 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void RenameMethodRefOrMethodSpec(IMethod method, Dictionary<MethodDef, RefMethodMetas> refMethodMetasMap)
|
||||||
|
{
|
||||||
|
if (method is MemberRef memberRef)
|
||||||
|
{
|
||||||
|
RenameMethodRef(memberRef, refMethodMetasMap);
|
||||||
|
}
|
||||||
|
else if (method is MethodSpec methodSpec)
|
||||||
|
{
|
||||||
|
if (methodSpec.Method is MemberRef memberRef2)
|
||||||
|
{
|
||||||
|
RenameMethodRef(memberRef2, refMethodMetasMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void BuildRefMethodMetasMap(Dictionary<MethodDef, RefMethodMetas> refMethodMetasMap)
|
private void BuildRefMethodMetasMap(Dictionary<MethodDef, RefMethodMetas> refMethodMetasMap)
|
||||||
{
|
{
|
||||||
|
@ -403,17 +417,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
{
|
{
|
||||||
foreach (IMethod method in WalkAllMethodInstructionOperand<IMethod>(mod))
|
foreach (IMethod method in WalkAllMethodInstructionOperand<IMethod>(mod))
|
||||||
{
|
{
|
||||||
if (method is MemberRef memberRef)
|
RenameMethodRefOrMethodSpec(method, refMethodMetasMap);
|
||||||
{
|
|
||||||
RenameMethodRef(memberRef, refMethodMetasMap);
|
|
||||||
}
|
|
||||||
else if (method is MethodSpec methodSpec)
|
|
||||||
{
|
|
||||||
if (methodSpec.Method is MemberRef memberRef2)
|
|
||||||
{
|
|
||||||
RenameMethodRef(memberRef2, refMethodMetasMap);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var type in mod.GetTypes())
|
foreach (var type in mod.GetTypes())
|
||||||
|
@ -424,26 +428,26 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
{
|
{
|
||||||
foreach (MethodOverride methodOverride in method.Overrides)
|
foreach (MethodOverride methodOverride in method.Overrides)
|
||||||
{
|
{
|
||||||
if (methodOverride.MethodDeclaration is MemberRef memberRef)
|
RenameMethodRefOrMethodSpec(methodOverride.MethodDeclaration, refMethodMetasMap);
|
||||||
{
|
RenameMethodRefOrMethodSpec(methodOverride.MethodBody, refMethodMetasMap);
|
||||||
RenameMethodRef(memberRef, refMethodMetasMap);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Assert.IsTrue(methodOverride.MethodDeclaration is MethodDef);
|
|
||||||
}
|
|
||||||
if (methodOverride.MethodBody is MemberRef memberRef2)
|
|
||||||
{
|
|
||||||
RenameMethodRef(memberRef2, refMethodMetasMap);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Assert.IsTrue(methodOverride.MethodBody is MethodDef);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
foreach (var e in _refTypeRefMetasMap)
|
||||||
|
{
|
||||||
|
TypeDef typeDef = e.Key;
|
||||||
|
var hierarchyFields = new List<FieldDef>();
|
||||||
|
BuildHierarchyFields(typeDef, hierarchyFields);
|
||||||
|
RefTypeDefMetas typeDefMetas = e.Value;
|
||||||
|
foreach (CustomAttribute ca in typeDefMetas.customAttributes)
|
||||||
|
{
|
||||||
|
if (ca.Constructor is IMethod method)
|
||||||
|
{
|
||||||
|
RenameMethodRefOrMethodSpec(method, refMethodMetasMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue