Support ldloca and ldarga
This commit is contained in:
parent
5511ab833b
commit
1935e58dbf
|
@ -160,6 +160,7 @@ namespace de4dot.code.deobfuscators {
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
TypeReference fieldType;
|
TypeReference fieldType;
|
||||||
|
VariableDefinition local;
|
||||||
switch (pushInstr.OpCode.Code) {
|
switch (pushInstr.OpCode.Code) {
|
||||||
case Code.Ldstr:
|
case Code.Ldstr:
|
||||||
fieldType = method.Module.TypeSystem.String;
|
fieldType = method.Module.TypeSystem.String;
|
||||||
|
@ -211,12 +212,25 @@ namespace de4dot.code.deobfuscators {
|
||||||
case Code.Ldloc_1:
|
case Code.Ldloc_1:
|
||||||
case Code.Ldloc_2:
|
case Code.Ldloc_2:
|
||||||
case Code.Ldloc_3:
|
case Code.Ldloc_3:
|
||||||
var local = DotNetUtils.getLocalVar(method.Body.Variables, pushInstr);
|
local = DotNetUtils.getLocalVar(method.Body.Variables, pushInstr);
|
||||||
if (local == null)
|
if (local == null)
|
||||||
return null;
|
return null;
|
||||||
fieldType = local.VariableType;
|
fieldType = local.VariableType;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Code.Ldloca:
|
||||||
|
case Code.Ldloca_S:
|
||||||
|
local = pushInstr.Operand as VariableDefinition;
|
||||||
|
if (local == null)
|
||||||
|
return null;
|
||||||
|
fieldType = createByReferenceType(local.VariableType);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Code.Ldarga:
|
||||||
|
case Code.Ldarga_S:
|
||||||
|
fieldType = createByReferenceType(DotNetUtils.getArgType(method, pushInstr));
|
||||||
|
break;
|
||||||
|
|
||||||
case Code.Ldfld:
|
case Code.Ldfld:
|
||||||
case Code.Ldsfld:
|
case Code.Ldsfld:
|
||||||
var field2 = pushInstr.Operand as FieldReference;
|
var field2 = pushInstr.Operand as FieldReference;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user