Rename method return parameters

This commit is contained in:
de4dot 2012-11-04 11:45:04 +01:00
parent 7ba4905cc7
commit 9376aa0de5
10 changed files with 51 additions and 8 deletions

View File

@ -704,6 +704,10 @@ namespace de4dot.code.deobfuscators {
return name != null && checkValidName(name);
}
public virtual bool isValidMethodReturnArgName(string name) {
return string.IsNullOrEmpty(name) || checkValidName(name);
}
public virtual bool isValidResourceKeyName(string name) {
return name != null && checkValidName(name);
}

View File

@ -218,6 +218,10 @@ namespace de4dot.code.deobfuscators.dotNET_Reactor.v3 {
return name != null && checkValidName(name, isRandomNameMembers);
}
public override bool isValidMethodReturnArgName(string name) {
return string.IsNullOrEmpty(name) || checkValidName(name, isRandomNameMembers);
}
public override bool isValidResourceKeyName(string name) {
return name != null && checkValidName(name, isRandomNameMembers);
}

View File

@ -223,6 +223,10 @@ namespace de4dot.code.deobfuscators.dotNET_Reactor.v4 {
return name != null && checkValidName(name, isRandomNameMembers);
}
public override bool isValidMethodReturnArgName(string name) {
return string.IsNullOrEmpty(name) || checkValidName(name, isRandomNameMembers);
}
public override bool isValidResourceKeyName(string name) {
return name != null && checkValidName(name, isRandomNameMembers);
}

View File

@ -27,6 +27,7 @@ namespace de4dot.code.renamer {
bool isValidFieldName(string name);
bool isValidGenericParamName(string name);
bool isValidMethodArgName(string name);
bool isValidMethodReturnArgName(string name);
bool isValidResourceKeyName(string name);
}
}

View File

@ -282,7 +282,7 @@ namespace de4dot.code.renamer {
allMethodInfos[method] = new MethodInfo(method);
foreach (var gp in method.GenericParams)
allGenericParamInfos[gp] = new GenericParamInfo(gp);
foreach (var param in method.ParamDefs)
foreach (var param in method.AllParamDefs)
allParamInfos[param] = new ParamInfo(param);
}
}

View File

@ -303,12 +303,16 @@ namespace de4dot.code.renamer {
}
if (RenameMethodArgs) {
foreach (var param in methodDef.ParamDefs) {
foreach (var param in methodDef.AllParamDefs) {
var paramInfo = memberInfos.param(param);
if (!paramInfo.gotNewName())
continue;
param.ParameterDefinition.CreateParamDef();
param.ParameterDefinition.Name = paramInfo.newName;
Log.v("Param ({0}/{1}): {2} => {3}", param.Index + 1, methodDef.ParamDefs.Count, Utils.removeNewlines(paramInfo.oldName), Utils.removeNewlines(paramInfo.newName));
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));
}
}

View File

@ -293,10 +293,10 @@ namespace de4dot.code.renamer {
}
void prepareRenameMethodArgs(MMethodDef methodDef) {
VariableNameState newVariableNameState = null;
ParamInfo info;
if (methodDef.ParamDefs.Count > 0) {
if (isEventHandler(methodDef)) {
ParamInfo info;
info = param(methodDef.ParamDefs[0]);
if (!info.gotNewName())
info.newName = "sender";
@ -306,10 +306,10 @@ namespace de4dot.code.renamer {
info.newName = "e";
}
else {
var newVariableNameState = variableNameState.cloneParamsOnly();
newVariableNameState = variableNameState.cloneParamsOnly();
var checker = NameChecker;
foreach (var paramDef in methodDef.ParamDefs) {
var info = param(paramDef);
info = param(paramDef);
if (info.gotNewName())
continue;
if (!checker.isValidMethodArgName(info.oldName))
@ -318,6 +318,15 @@ namespace de4dot.code.renamer {
}
}
info = param(methodDef.ReturnParamDef);
if (!info.gotNewName()) {
if (!NameChecker.isValidMethodReturnArgName(info.oldName)) {
if (newVariableNameState == null)
newVariableNameState = variableNameState.cloneParamsOnly();
info.newName = newVariableNameState.getNewParamName(info.oldName, methodDef.ReturnParamDef.ParameterDefinition);
}
}
if ((methodDef.Property != null && methodDef == methodDef.Property.SetMethod) ||
(methodDef.Event != null && (methodDef == methodDef.Event.AddMethod || methodDef == methodDef.Event.RemoveMethod))) {
if (methodDef.ParamDefs.Count > 0) {

View File

@ -24,6 +24,7 @@ namespace de4dot.code.renamer.asmmodules {
class MMethodDef : Ref {
IList<MGenericParamDef> genericParams;
IList<MParamDef> paramDefs = new List<MParamDef>();
MParamDef returnParamDef;
public MPropertyDef Property { get; set; }
public MEventDef Event { get; set; }
@ -32,6 +33,18 @@ namespace de4dot.code.renamer.asmmodules {
get { return paramDefs; }
}
public IEnumerable<MParamDef> AllParamDefs {
get {
yield return returnParamDef;
foreach (var paramDef in paramDefs)
yield return paramDef;
}
}
public MParamDef ReturnParamDef {
get { return returnParamDef; }
}
public IList<MGenericParamDef> GenericParams {
get { return genericParams; }
}
@ -47,6 +60,7 @@ namespace de4dot.code.renamer.asmmodules {
var param = methodDefinition.Parameters[i];
paramDefs.Add(new MParamDef(param, i));
}
returnParamDef = new MParamDef(methodDefinition.Parameters.ReturnParameter, -1);
}
public bool isPublic() {

View File

@ -23,6 +23,9 @@ namespace de4dot.code.renamer.asmmodules {
class MParamDef {
public Parameter ParameterDefinition { get; set; }
public int Index { get; private set; }
public bool IsReturnParameter {
get { return Index < 0; }
}
public MParamDef(Parameter parameterDefinition, int index) {
this.ParameterDefinition = parameterDefinition;

2
dot10

@ -1 +1 @@
Subproject commit e203b3f5b67d7c0e737cb953c62ae99dde1340e7
Subproject commit 9386800adc7057e8b90e7ac6af7d5725794d23d3