RenameMethod时检查CustomAttribute
parent
882047eb6c
commit
e0da3da2bc
|
@ -1,4 +1,5 @@
|
|||
using dnlib.DotNet;
|
||||
using NUnit.Framework;
|
||||
using Obfuz.Utils;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
@ -407,6 +408,10 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
|||
typeNode.SetAttribute("fullName", record?.signature ?? type.FullName);
|
||||
typeNode.SetAttribute("newFullName", record != null && record.status == RenameStatus.Renamed ? record.newName : "");
|
||||
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)
|
||||
{
|
||||
|
@ -622,6 +627,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
|||
if (_typeRenames.TryGetValue(type, out var record) && record.renameMappingData != null)
|
||||
{
|
||||
var rmt = (RenameMappingType)record.renameMappingData;
|
||||
Assert.IsFalse(string.IsNullOrWhiteSpace(rmt.newFullName));
|
||||
(newNamespace, newName) = MetaUtil.SplitNamespaceAndName(rmt.newFullName);
|
||||
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)
|
||||
{
|
||||
|
@ -403,17 +417,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
|||
{
|
||||
foreach (IMethod method in WalkAllMethodInstructionOperand<IMethod>(mod))
|
||||
{
|
||||
if (method is MemberRef memberRef)
|
||||
{
|
||||
RenameMethodRef(memberRef, refMethodMetasMap);
|
||||
}
|
||||
else if (method is MethodSpec methodSpec)
|
||||
{
|
||||
if (methodSpec.Method is MemberRef memberRef2)
|
||||
{
|
||||
RenameMethodRef(memberRef2, refMethodMetasMap);
|
||||
}
|
||||
}
|
||||
RenameMethodRefOrMethodSpec(method, refMethodMetasMap);
|
||||
}
|
||||
|
||||
foreach (var type in mod.GetTypes())
|
||||
|
@ -424,26 +428,26 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
|||
{
|
||||
foreach (MethodOverride methodOverride in method.Overrides)
|
||||
{
|
||||
if (methodOverride.MethodDeclaration is MemberRef memberRef)
|
||||
{
|
||||
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);
|
||||
}
|
||||
RenameMethodRefOrMethodSpec(methodOverride.MethodDeclaration, refMethodMetasMap);
|
||||
RenameMethodRefOrMethodSpec(methodOverride.MethodBody, refMethodMetasMap);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
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