最近在捣鼓一个加密算法的破解,搞得头晕眼花啊,加密组件被混淆过了,常用的ReFlector 反编译工具基本无能为力,只能勉强看看IL,以前从未研究过这东东,学习起来真是头大了,看来以后得好好学习啊。花了N天的时间,没日没夜的捣鼓,还是最后在牛人的帮助下,才搞掂! 郁闷
Brfalse_S 字段 如果 value 为 false、空引用或零,则将控制转移到目标指令。
Ldarg_1 字段 将索引为 1 的参数加载到计算堆栈上, 参数索引 从 1 开始。
Br 字段 无条件地将控制转移到目标指令。
Br_S 字段 无条件地将控制转移到目标指令(短格式)。
Brtrue_S 字段 如果 value 为 true、非空或非零,则将控制转移到目标指令(短格式)。
Ldloc_0 字段 将索引 0 处的局部变量加载到计算堆栈上,变量索引从0开始。
Ldloc_1 字段 将索引 1 处的局部变量加载到计算堆栈上。
Ldloc_2 字段 将索引 2 处的局部变量加载到计算堆栈上。
Ldloc_S 字段 将特定索引处的局部变量加载到计算堆栈上(短格式)。
Ldelem_U1 字段 将位于指定数组索引处的 unsigned int8 类型的元素作为 int32 加载到计算堆栈的顶部。
Stloc_0 字段 从计算堆栈的顶部弹出当前值并将其存储到索引 0 处的局部变量列表中。
Stloc_1 字段 从计算堆栈的顶部弹出当前值并将其存储到索引 1 处的局部变量列表中。
Stloc_2 字段 从计算堆栈的顶部弹出当前值并将其存储到索引 2 处的局部变量列表中。
Stloc_S 字段 从计算堆栈的顶部弹出当前值并将其存储在局部变量列表中的 index 处(短格式)。
Ldc_I4 字段 将所提供的 int32 类型的值作为 int32 推送到计算堆栈上。
Ldc_I4_1 字段 将整数值 1 作为 int32 推送到计算堆栈上。
Ldc_I4_8 字段 将整数值 8 作为 int32 推送到计算堆栈上。
Ldlen 字段 将从零开始的、一维数组的元素的数目推送到计算堆栈上。
Shr 字段 将整数值右移(保留符号)指定的位数,并将结果推送到计算堆栈上。
Xor 字段 计算位于计算堆栈顶部的两个值的按位异或,并且将结果推送到计算堆栈上。
Conv_I4 字段 将位于计算堆栈顶部的值转换为 int32。
Conv_U1 字段 将位于计算堆栈顶部的值转换为 unsigned int8,然后将其扩展为 int32。
Conv_U2 字段 将位于计算堆栈顶部的值转换为 unsigned int16,然后将其扩展为 int32。
Stelem_I1 字段 用计算堆栈上的 int8 值替换给定索引处的数组元素。
Mul 字段 将两个值相乘并将结果推送到计算堆栈上。
Add 字段 将两个值相加并将结果推送到计算堆栈上。
Ceq 字段 比较两个值。如果这两个值相等,则将整数值 1 (int32) 推送到计算堆栈上;否则,将 0 (int32) 推送到 计算堆栈上。
Clt 字段 比较两个值。如果第一个值小于第二个值,则将整数值 1 (int32) 推送到计算堆栈上;反之,将 0 (int32) 推送到计算堆栈上。
Ret 字段 从当前方法返回,并将返回值(如果存在)从调用方的计算堆栈推送到被调用方的计算堆栈上。
Nop 字段 如果修补操作码,则填充空间。尽管可能消耗处理周期,但未执行任何有意义的操作。