v寄存器表示的话,参数寄出去始终处于最后面,修改寄存器数相当麻烦,增加一个寄存器所有参数寄存器都要后移.p寄存器表示就简单很多,.registers x只表示本地寄存器,没包含参数寄存器,增加一个就是在原来的v(max)+1. p寄存器是smali自己定义的方便寄存器修改而已,dex本身是按v方式处理的,
../smali/baksmali/src/main/java/org/jf/baksmali/Adaptors/MethodDefinition.java里处理寄存器数是.locals还是.registers的方法
private static int getRegisterCount(ClassDataItem.EncodedMethod encodedMethod)
{
int totalRegisters = encodedMethod.codeItem.getRegisterCount();
if (baksmali.useLocalsDirective) {
int parameterRegisters = encodedMethod.method.getPrototype().getParameterRegisterCount();
if ((encodedMethod.accessFlags & AccessFlags.STATIC.getValue()) == 0) {
parameterRegisters++;
}
return totalRegisters - parameterRegisters;
}
return totalRegisters;
}
smali/baksmali/src/main/java/org/jf/baksmali/Adaptors/RegisterFormatter.java里有把v寄存器分离成p形式的, |