MethodDef.Parameters contains the hidden 'this' param, so add some fixes to old code
This commit is contained in:
parent
6a8e8dcb78
commit
c9f1f8073e
|
@ -332,7 +332,7 @@ namespace AssemblyData.methodsrewriter {
|
|||
}
|
||||
|
||||
static IList<TypeSig> getParameters(MethodDef method) {
|
||||
var list = new List<TypeSig>(method.Parameters.Count + 1);
|
||||
var list = new List<TypeSig>(method.Parameters.Count);
|
||||
for (int i = 0; i < method.Parameters.Count; i++)
|
||||
list.Add(method.Parameters[i].Type);
|
||||
return list;
|
||||
|
|
|
@ -436,15 +436,16 @@ namespace de4dot.code {
|
|||
if (methodName != null && methodName != method.Name)
|
||||
continue;
|
||||
|
||||
var sig = method.MethodSig;
|
||||
if (argsStrings == null) {
|
||||
if (method.Parameters.Count == 0)
|
||||
if (sig.Params.Count == 0)
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
if (argsStrings.Length != method.Parameters.Count)
|
||||
if (argsStrings.Length != sig.Params.Count)
|
||||
continue;
|
||||
for (int i = 0; i < argsStrings.Length; i++) {
|
||||
if (argsStrings[i] != method.Parameters[i].Type.FullName)
|
||||
if (argsStrings[i] != sig.Params[i].FullName)
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -260,6 +260,8 @@ namespace de4dot.code.deobfuscators {
|
|||
|
||||
argInfos.Clear();
|
||||
foreach (var arg in method.Parameters) {
|
||||
if (arg.IsHiddenThisParameter)
|
||||
continue;
|
||||
if (!isUnknownType(arg))
|
||||
continue;
|
||||
argInfos[arg] = new TypeInfo<Parameter>(arg);
|
||||
|
|
|
@ -312,7 +312,7 @@ namespace de4dot.code.renamer {
|
|||
if (param.IsReturnParameter)
|
||||
Log.v("RetParam: {0} => {1}", Utils.removeNewlines(paramInfo.oldName), Utils.removeNewlines(paramInfo.newName));
|
||||
else
|
||||
Log.v("Param ({0}/{1}): {2} => {3}", param.Index + 1, methodDef.ParamDefs.Count, Utils.removeNewlines(paramInfo.oldName), Utils.removeNewlines(paramInfo.newName));
|
||||
Log.v("Param ({0}/{1}): {2} => {3}", param.ParameterDefinition.MethodSigIndex + 1, methodDef.MethodDef.MethodSig.Params.Count, Utils.removeNewlines(paramInfo.oldName), Utils.removeNewlines(paramInfo.newName));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -600,10 +600,10 @@ namespace de4dot.code.renamer {
|
|||
if (propMethod.Property != null)
|
||||
return null;
|
||||
|
||||
var method = propMethod.MethodDef;
|
||||
if (method.Parameters.Count == 0)
|
||||
var sig = propMethod.MethodDef.MethodSig;
|
||||
if (sig.Params.Count == 0)
|
||||
return null;
|
||||
var propType = method.Parameters[method.Parameters.Count - 1].Type;
|
||||
var propType = sig.Params[sig.Params.Count - 1];
|
||||
var propDef = createProperty(ownerType, name, propType, null, propMethod.MethodDef);
|
||||
if (propDef == null)
|
||||
return null;
|
||||
|
@ -912,7 +912,7 @@ namespace de4dot.code.renamer {
|
|||
|
||||
void restoreMethodArgs(MethodNameGroups groups) {
|
||||
foreach (var group in groups.getAllGroups()) {
|
||||
if (group.Methods[0].ParamDefs.Count == 0)
|
||||
if (group.Methods[0].VisibleParameterCount == 0)
|
||||
continue;
|
||||
|
||||
var argNames = getValidArgNames(group);
|
||||
|
@ -949,7 +949,7 @@ namespace de4dot.code.renamer {
|
|||
if (overrideDef == null)
|
||||
continue;
|
||||
}
|
||||
if (overrideDef.ParamDefs.Count != method.ParamDefs.Count)
|
||||
if (overrideDef.VisibleParameterCount != method.VisibleParameterCount)
|
||||
continue;
|
||||
methods.Add(overrideDef);
|
||||
}
|
||||
|
@ -1373,7 +1373,7 @@ namespace de4dot.code.renamer {
|
|||
static PropertyMethodType getPropertyMethodType(MMethodDef method) {
|
||||
if (DotNetUtils.hasReturnValue(method.MethodDef))
|
||||
return PropertyMethodType.Getter;
|
||||
if (method.ParamDefs.Count > 0)
|
||||
if (method.VisibleParameterCount > 0)
|
||||
return PropertyMethodType.Setter;
|
||||
return PropertyMethodType.Other;
|
||||
}
|
||||
|
|
|
@ -295,13 +295,13 @@ namespace de4dot.code.renamer {
|
|||
void prepareRenameMethodArgs(MMethodDef methodDef) {
|
||||
VariableNameState newVariableNameState = null;
|
||||
ParamInfo info;
|
||||
if (methodDef.ParamDefs.Count > 0) {
|
||||
if (methodDef.VisibleParameterCount > 0) {
|
||||
if (isEventHandler(methodDef)) {
|
||||
info = param(methodDef.ParamDefs[0]);
|
||||
info = param(methodDef.ParamDefs[methodDef.VisibleParameterBaseIndex]);
|
||||
if (!info.gotNewName())
|
||||
info.newName = "sender";
|
||||
|
||||
info = param(methodDef.ParamDefs[1]);
|
||||
info = param(methodDef.ParamDefs[methodDef.VisibleParameterBaseIndex + 1]);
|
||||
if (!info.gotNewName())
|
||||
info.newName = "e";
|
||||
}
|
||||
|
@ -309,6 +309,8 @@ namespace de4dot.code.renamer {
|
|||
newVariableNameState = variableNameState.cloneParamsOnly();
|
||||
var checker = NameChecker;
|
||||
foreach (var paramDef in methodDef.ParamDefs) {
|
||||
if (paramDef.IsHiddenThisParameter)
|
||||
continue;
|
||||
info = param(paramDef);
|
||||
if (info.gotNewName())
|
||||
continue;
|
||||
|
@ -329,7 +331,7 @@ namespace de4dot.code.renamer {
|
|||
|
||||
if ((methodDef.Property != null && methodDef == methodDef.Property.SetMethod) ||
|
||||
(methodDef.Event != null && (methodDef == methodDef.Event.AddMethod || methodDef == methodDef.Event.RemoveMethod))) {
|
||||
if (methodDef.ParamDefs.Count > 0) {
|
||||
if (methodDef.VisibleParameterCount > 0) {
|
||||
var paramDef = methodDef.ParamDefs[methodDef.ParamDefs.Count - 1];
|
||||
param(paramDef).newName = "value";
|
||||
}
|
||||
|
@ -403,17 +405,14 @@ namespace de4dot.code.renamer {
|
|||
}
|
||||
|
||||
static bool isEventHandler(MMethodDef methodDef) {
|
||||
var md = methodDef.MethodDef;
|
||||
if (md.Parameters.Count != 2)
|
||||
return false;
|
||||
var sig = md.MethodSig;
|
||||
if (sig == null)
|
||||
var sig = methodDef.MethodDef.MethodSig;
|
||||
if (sig == null || sig.Params.Count != 2)
|
||||
return false;
|
||||
if (sig.RetType.ElementType != ElementType.Void)
|
||||
return false;
|
||||
if (md.Parameters[0].Type.ElementType != ElementType.Object)
|
||||
if (sig.Params[0].ElementType != ElementType.Object)
|
||||
return false;
|
||||
if (!md.Parameters[1].Type.FullName.Contains("EventArgs"))
|
||||
if (!sig.Params[1].FullName.Contains("EventArgs"))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
@ -588,7 +587,7 @@ namespace de4dot.code.renamer {
|
|||
return null;
|
||||
if (sig.RetType.ElementType != ElementType.Void)
|
||||
return null;
|
||||
if (method.Parameters.Count != 1)
|
||||
if (sig.Params.Count != 1)
|
||||
return null;
|
||||
if (method.CilBody.LocalList.Count != 1)
|
||||
return null;
|
||||
|
|
|
@ -67,7 +67,7 @@ namespace de4dot.code.renamer {
|
|||
|
||||
bool isGenericParam(ITypeDefOrRef tdr) {
|
||||
var ts = tdr as TypeSpec;
|
||||
if (ts != null)
|
||||
if (ts == null)
|
||||
return false;
|
||||
var sig = ts.TypeSig.RemovePinnedAndModifiers();
|
||||
return sig is GenericSig;
|
||||
|
|
|
@ -25,10 +25,20 @@ namespace de4dot.code.renamer.asmmodules {
|
|||
IList<MGenericParamDef> genericParams;
|
||||
IList<MParamDef> paramDefs = new List<MParamDef>();
|
||||
MParamDef returnParamDef;
|
||||
int visibleParamCount;
|
||||
int visibleBaseIndex;
|
||||
|
||||
public MPropertyDef Property { get; set; }
|
||||
public MEventDef Event { get; set; }
|
||||
|
||||
public int VisibleParameterCount {
|
||||
get { return visibleParamCount; }
|
||||
}
|
||||
|
||||
public int VisibleParameterBaseIndex {
|
||||
get { return visibleBaseIndex; }
|
||||
}
|
||||
|
||||
public IList<MParamDef> ParamDefs {
|
||||
get { return paramDefs; }
|
||||
}
|
||||
|
@ -56,8 +66,11 @@ namespace de4dot.code.renamer.asmmodules {
|
|||
public MMethodDef(MethodDef methodDefinition, MTypeDef owner, int index)
|
||||
: base(methodDefinition, owner, index) {
|
||||
genericParams = MGenericParamDef.createGenericParamDefList(MethodDef.GenericParams);
|
||||
visibleBaseIndex = methodDefinition.MethodSig.HasThis ? 1 : 0;
|
||||
for (int i = 0; i < methodDefinition.Parameters.Count; i++) {
|
||||
var param = methodDefinition.Parameters[i];
|
||||
if (param.IsNormalMethodParameter)
|
||||
visibleParamCount++;
|
||||
paramDefs.Add(new MParamDef(param, i));
|
||||
}
|
||||
returnParamDef = new MParamDef(methodDefinition.Parameters.ReturnParameter, -1);
|
||||
|
|
|
@ -225,6 +225,10 @@ namespace de4dot.code.renamer.asmmodules {
|
|||
newTypes.add(typeDef);
|
||||
}
|
||||
types = newTypes;
|
||||
|
||||
bool old = ModuleDefMD.EnableTypeDefFindCache;
|
||||
ModuleDefMD.EnableTypeDefFindCache = false;
|
||||
ModuleDefMD.EnableTypeDefFindCache = old;
|
||||
}
|
||||
|
||||
static ITypeDefOrRef getNonGenericTypeReference(ITypeDefOrRef typeRef) {
|
||||
|
|
|
@ -377,30 +377,33 @@ namespace de4dot.code.renamer.asmmodules {
|
|||
if (scope == null)
|
||||
return null;
|
||||
|
||||
if (scope.ScopeType == ScopeType.AssemblyRef)
|
||||
var scopeType = scope.ScopeType;
|
||||
if (scopeType == ScopeType.AssemblyRef)
|
||||
return findModules((AssemblyRef)scope);
|
||||
|
||||
if (scope.ScopeType == ScopeType.ModuleDef) {
|
||||
if (scopeType == ScopeType.ModuleDef) {
|
||||
var modules = findModules((ModuleDef)scope);
|
||||
if (modules != null)
|
||||
return modules;
|
||||
}
|
||||
|
||||
if (scope.ScopeType == ScopeType.ModuleRef) {
|
||||
if (scopeType == ScopeType.ModuleRef) {
|
||||
var moduleRef = (ModuleRef)scope;
|
||||
if (moduleRef.Name == type.OwnerModule.Name) {
|
||||
var modules = findModules(type.OwnerModule);
|
||||
if (modules != null)
|
||||
return modules;
|
||||
}
|
||||
}
|
||||
|
||||
if (scopeType == ScopeType.ModuleRef || scopeType == ScopeType.ModuleDef) {
|
||||
var asm = type.OwnerModule.Assembly;
|
||||
if (asm == null)
|
||||
return null;
|
||||
var moduleHash = assemblyHash.lookup(asm.FullName);
|
||||
if (moduleHash == null)
|
||||
return null;
|
||||
var module = moduleHash.lookup(moduleRef.Name.String);
|
||||
var module = moduleHash.lookup(scope.ScopeName);
|
||||
if (module == null)
|
||||
return null;
|
||||
return new List<Module> { module };
|
||||
|
|
|
@ -24,7 +24,10 @@ namespace de4dot.code.renamer.asmmodules {
|
|||
public Parameter ParameterDefinition { get; set; }
|
||||
public int Index { get; private set; }
|
||||
public bool IsReturnParameter {
|
||||
get { return Index < 0; }
|
||||
get { return ParameterDefinition.IsReturnTypeParameter; }
|
||||
}
|
||||
public bool IsHiddenThisParameter {
|
||||
get { return ParameterDefinition.IsHiddenThisParameter; }
|
||||
}
|
||||
|
||||
public MParamDef(Parameter parameterDefinition, int index) {
|
||||
|
|
|
@ -53,9 +53,9 @@ namespace de4dot.code.renamer.asmmodules {
|
|||
}
|
||||
|
||||
public bool isItemProperty() {
|
||||
if (GetMethod != null && GetMethod.ParamDefs.Count >= 1)
|
||||
if (GetMethod != null && GetMethod.VisibleParameterCount >= 1)
|
||||
return true;
|
||||
if (SetMethod != null && SetMethod.ParamDefs.Count >= 2)
|
||||
if (SetMethod != null && SetMethod.VisibleParameterCount >= 2)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
|
2
dot10
2
dot10
|
@ -1 +1 @@
|
|||
Subproject commit e532b444e4f3fbf7a84702d3fc30063d4973790f
|
||||
Subproject commit ebd41734e89ab48d63f317958e8a5741aad1f431
|
Loading…
Reference in New Issue
Block a user