Add ScriptOpcodeTransformer to deob

This commit is contained in:
Lucas
2019-07-06 23:10:56 +02:00
parent 8ba3ca3fef
commit 742bf7338d
3 changed files with 666 additions and 0 deletions

View File

@@ -0,0 +1,152 @@
package net.runelite.deob.deobfuscators.transformers;
import java.util.ListIterator;
import net.runelite.asm.ClassFile;
import net.runelite.asm.ClassGroup;
import net.runelite.asm.Field;
import net.runelite.asm.Method;
import net.runelite.asm.Type;
import net.runelite.asm.attributes.Code;
import net.runelite.asm.attributes.code.Instruction;
import net.runelite.asm.attributes.code.Instructions;
import net.runelite.asm.attributes.code.instruction.types.PushConstantInstruction;
import net.runelite.asm.attributes.code.instructions.GetStatic;
import net.runelite.asm.attributes.code.instructions.ILoad;
import net.runelite.asm.attributes.code.instructions.IfICmpEq;
import net.runelite.asm.attributes.code.instructions.IfICmpNe;
import net.runelite.asm.attributes.code.instructions.LDC;
import net.runelite.asm.attributes.code.instructions.PutStatic;
import net.runelite.asm.attributes.code.instructions.VReturn;
import net.runelite.asm.pool.Class;
import net.runelite.asm.signature.Signature;
import net.runelite.deob.Transformer;
import net.runelite.deob.deobfuscators.transformers.scriptopcodes.ScriptOpcode;
import org.objectweb.asm.Opcodes;
import static org.objectweb.asm.Opcodes.ACC_FINAL;
import static org.objectweb.asm.Opcodes.ACC_PUBLIC;
import static org.objectweb.asm.Opcodes.ACC_STATIC;
public class ScriptOpcodesTransformer implements Transformer // robots in disguise
{
private static final String SCRIPT_OPCODES = "net/runelite/rs/ScriptOpcodes";
@Override
public void transform(ClassGroup group)
{
initializeOpcodesClassFile(group);
for (ClassFile cf : group.getClasses())
{
if (cf.getName().startsWith("net/runelite/rs"))
{
continue;
}
for (Method m : cf.getMethods())
{
if (!m.isStatic())
{
continue;
}
if (!m.getDescriptor().getArguments().contains(new Type("LScript;")) && !m.getDescriptor().getArguments().contains(new Type("LScriptEvent;")))
{
continue;
}
boolean varIndexIsKnownAnd0 = m.getDescriptor().getArguments().contains(new Type("LScript;"));
Code code = m.getCode();
Instructions ins = code.getInstructions();
ListIterator<Instruction> it = ins.getInstructions().listIterator();
Instruction i;
while(it.hasNext())
{
i = it.next();
if (!(i instanceof ILoad) || (varIndexIsKnownAnd0 && ((ILoad) i).getVariableIndex() != 0))
{
continue;
}
i = it.next();
if (!(i instanceof PushConstantInstruction) ||
!(((PushConstantInstruction) i).getConstant() instanceof Number))
{
continue;
}
int val = ((Number) ((PushConstantInstruction) i).getConstant()).intValue();
String name = ScriptOpcode.nameFromID(val);
i = it.next();
if (name == null || !(i instanceof IfICmpNe || i instanceof IfICmpEq))
{
continue;
}
it.previous();
it.previous();
net.runelite.asm.pool.Field pool = new net.runelite.asm.pool.Field(
new Class(SCRIPT_OPCODES),
name,
Type.INT
);
GetStatic getStatic = new GetStatic(ins, pool);
it.set(getStatic);
}
}
}
}
private static void initializeOpcodesClassFile(ClassGroup group)
{
ClassFile scriptOpcodes = group.findClass(SCRIPT_OPCODES);
if (scriptOpcodes == null)
{
scriptOpcodes = new ClassFile(group);
scriptOpcodes.setName(SCRIPT_OPCODES);
scriptOpcodes.setSuperName(Type.OBJECT.getInternalName());
scriptOpcodes.setAccess(Opcodes.ACC_PUBLIC);
group.addClass(scriptOpcodes);
}
else
{
scriptOpcodes.getFields().clear();
}
Method clinit = scriptOpcodes.findMethod("<clinit>");
if (clinit == null)
{
clinit = new Method(scriptOpcodes, "<clinit>", new Signature("()V"));
clinit.setStatic(true);
Code code = new Code(clinit);
code.setMaxStack(1);
clinit.setCode(code);
scriptOpcodes.addMethod(clinit);
}
Code code = clinit.getCode();
Instructions ins = code.getInstructions();
for (ScriptOpcode opcode : ScriptOpcode.values())
{
Field field = new Field(scriptOpcodes, opcode.name(), Type.INT);
field.setAccessFlags(ACC_PUBLIC | ACC_STATIC | ACC_FINAL);
field.setValue(opcode.opcode);
scriptOpcodes.addField(field);
LDC ldc = new LDC(ins, opcode.opcode);
PutStatic put = new PutStatic(ins, field);
ins.addInstruction(0, ldc);
ins.addInstruction(1, put);
}
ins.addInstruction(new VReturn(ins));
}
}

View File

@@ -0,0 +1,511 @@
package net.runelite.deob.deobfuscators.transformers.scriptopcodes;
import com.google.common.collect.ImmutableMap;
import java.util.Map;
public enum ScriptOpcode
{
// This class is pretty much the same as net.runelite.cache.script.Opcodes, and should be updated alongside that
ICONST(0),
GET_VARP(1),
SET_VARP(2),
SCONST(3),
JUMP(6),
IF_ICMPNE(7),
IF_ICMPEQ(8),
IF_ICMPLT(9),
IF_ICMPGT(10),
RETURN(21),
GET_VARBIT(25),
SET_VARBIT(27),
IF_ICMPLE(31),
IF_ICMPGE(32),
ILOAD(33),
ISTORE(34),
SLOAD(35),
SSTORE(36),
JOIN_STRING(37),
POP_INT(38),
POP_STRING(39),
INVOKE(40),
GET_VARC_INT(42),
SET_VARC_INT(43),
DEFINE_ARRAY(44),
GET_ARRAY_INT(45),
SET_ARRAY_INT(46),
GET_VARC_STRING_OLD(47),
SET_VARC_STRING_OLD(48),
GET_VARC_STRING(49),
SET_VARC_STRING(50),
SWITCH(60),
CC_CREATE(100),
CC_DELETE(101),
CC_DELETEALL(102),
CC_FIND(200),
IF_FIND(201),
CC_SETPOSITION(1000),
CC_SETSIZE(1001),
CC_SETHIDE(1003),
CC_SETNOCLICKTHROUGH(1005),
CC_SETSCROLLPOS(1100),
CC_SETCOLOUR(1101),
CC_SETFILL(1102),
CC_SETTRANS(1103),
CC_SETLINEWID(1104),
CC_SETGRAPHIC(1105),
CC_SET2DANGLE(1106),
CC_SETTILING(1107),
CC_SETMODEL(1108),
CC_SETMODELANGLE(1109),
CC_SETMODELANIM(1110),
CC_SETMODELORTHOG(1111),
CC_SETTEXT(1112),
CC_SETTEXTFONT(1113),
CC_SETTEXTALIGN(1114),
CC_SETTEXTSHADOW(1115),
CC_SETOUTLINE(1116),
CC_SETGRAPHICSHADOW(1117),
CC_SETVFLIP(1118),
CC_SETHFLIP(1119),
CC_SETSCROLLSIZE(1120),
CC_RESUME_PAUSEBUTTON(1121),
CC_SETFILLCOLOUR(1123),
CC_SETLINEDIRECTION(1126),
CC_SETOBJECT(1200),
CC_SETNPCHEAD(1201),
CC_SETPLAYERHEAD_SELF(1202),
CC_SETOBJECT_NONUM(1205),
CC_SETOBJECT_ALWAYS_NUM(1212),
CC_SETOP(1300),
CC_SETDRAGGABLE(1301),
CC_SETDRAGGABLEBEHAVIOR(1302),
CC_SETDRAGDEADZONE(1303),
CC_SETDRAGDEADTIME(1304),
CC_SETOPBASE(1305),
CC_SETTARGETVERB(1306),
CC_CLEAROPS(1307),
CC_SETONCLICK(1400),
CC_SETONHOLD(1401),
CC_SETONRELEASE(1402),
CC_SETONMOUSEOVER(1403),
CC_SETONMOUSELEAVE(1404),
CC_SETONDRAG(1405),
CC_SETONTARGETLEAVE(1406),
CC_SETONVARTRANSMIT(1407),
CC_SETONTIMER(1408),
CC_SETONOP(1409),
CC_SETONDRAGCOMPLETE(1410),
CC_SETONCLICKREPEAT(1411),
CC_SETONMOUSEREPEAT(1412),
CC_SETONINVTRANSMIT(1414),
CC_SETONSTATTRANSMIT(1415),
CC_SETONTARGETENTER(1416),
CC_SETONSCROLLWHEEL(1417),
CC_SETONCHATTRANSMIT(1418),
CC_SETONKEY(1419),
CC_SETONFRIENDTRANSMIT(1420),
CC_SETONCLANTRANSMIT(1421),
CC_SETONMISCTRANSMIT(1422),
CC_SETONDIALOGABORT(1423),
CC_SETONSUBCHANGE(1424),
CC_SETONSTOCKTRANSMIT(1425),
CC_SETONRESIZE(1427),
CC_GETX(1500),
CC_GETY(1501),
CC_GETWIDTH(1502),
CC_GETHEIGHT(1503),
CC_GETHIDE(1504),
CC_GETLAYER(1505),
CC_GETSCROLLX(1600),
CC_GETSCROLLY(1601),
CC_GETTEXT(1602),
CC_GETSCROLLWIDTH(1603),
CC_GETSCROLLHEIGHT(1604),
CC_GETMODELZOOM(1605),
CC_GETMODELANGLE_X(1606),
CC_GETMODELANGLE_Z(1607),
CC_GETMODELANGLE_Y(1608),
CC_GETTRANS(1609),
CC_GETCOLOUR(1611),
CC_GETFILLCOLOUR(1612),
CC_GETINVOBJECT(1700),
CC_GETINVCOUNT(1701),
CC_GETID(1702),
CC_GETTARGETMASK(1800),
CC_GETOP(1801),
CC_GETOPBASE(1802),
CC_CALLONRESIZE(1927),
IF_SETPOSITION(2000),
IF_SETSIZE(2001),
IF_SETHIDE(2003),
IF_SETNOCLICKTHROUGH(2005),
IF_SETSCROLLPOS(2100),
IF_SETCOLOUR(2101),
IF_SETFILL(2102),
IF_SETTRANS(2103),
IF_SETLINEWID(2104),
IF_SETGRAPHIC(2105),
IF_SET2DANGLE(2106),
IF_SETTILING(2107),
IF_SETMODEL(2108),
IF_SETMODELANGLE(2109),
IF_SETMODELANIM(2110),
IF_SETMODELORTHOG(2111),
IF_SETTEXT(2112),
IF_SETTEXTFONT(2113),
IF_SETTEXTALIGN(2114),
IF_SETTEXTSHADOW(2115),
IF_SETOUTLINE(2116),
IF_SETGRAPHICSHADOW(2117),
IF_SETVFLIP(2118),
IF_SETHFLIP(2119),
IF_SETSCROLLSIZE(2120),
IF_RESUME_PAUSEBUTTON(2121),
IF_SETFILLCOLOUR(2123),
IF_SETLINEDIRECTION(2126),
IF_SETOBJECT(2200),
IF_SETNPCHEAD(2201),
IF_SETPLAYERHEAD_SELF(2202),
IF_SETOBJECT_NONUM(2205),
IF_SETOBJECT_ALWAYS_NUM(2212),
IF_SETOP(2300),
IF_SETDRAGGABLE(2301),
IF_SETDRAGGABLEBEHAVIOR(2302),
IF_SETDRAGDEADZONE(2303),
IF_SETDRAGDEADTIME(2304),
IF_SETOPBASE(2305),
IF_SETTARGETVERB(2306),
IF_CLEAROPS(2307),
IF_SETOPKEY(2350),
IF_SETOPTKEY(2351),
IF_SETOPKEYRATE(2352),
IF_SETOPTKEYRATE(2353),
IF_SETOPKEYIGNOREHELD(2354),
IF_SETOPTKEYIGNOREHELD(2355),
IF_SETONCLICK(2400),
IF_SETONHOLD(2401),
IF_SETONRELEASE(2402),
IF_SETONMOUSEOVER(2403),
IF_SETONMOUSELEAVE(2404),
IF_SETONDRAG(2405),
IF_SETONTARGETLEAVE(2406),
IF_SETONVARTRANSMIT(2407),
IF_SETONTIMER(2408),
IF_SETONOP(2409),
IF_SETONDRAGCOMPLETE(2410),
IF_SETONCLICKREPEAT(2411),
IF_SETONMOUSEREPEAT(2412),
IF_SETONINVTRANSMIT(2414),
IF_SETONSTATTRANSMIT(2415),
IF_SETONTARGETENTER(2416),
IF_SETONSCROLLWHEEL(2417),
IF_SETONCHATTRANSMIT(2418),
IF_SETONKEY(2419),
IF_SETONFRIENDTRANSMIT(2420),
IF_SETONCLANTRANSMIT(2421),
IF_SETONMISCTRANSMIT(2422),
IF_SETONDIALOGABORT(2423),
IF_SETONSUBCHANGE(2424),
IF_SETONSTOCKTRANSMIT(2425),
IF_SETONRESIZE(2427),
IF_GETX(2500),
IF_GETY(2501),
IF_GETWIDTH(2502),
IF_GETHEIGHT(2503),
IF_GETHIDE(2504),
IF_GETLAYER(2505),
IF_GETSCROLLX(2600),
IF_GETSCROLLY(2601),
IF_GETTEXT(2602),
IF_GETSCROLLWIDTH(2603),
IF_GETSCROLLHEIGHT(2604),
IF_GETMODELZOOM(2605),
IF_GETMODELANGLE_X(2606),
IF_GETMODELANGLE_Z(2607),
IF_GETMODELANGLE_Y(2608),
IF_GETTRANS(2609),
IF_GETCOLOUR(2611),
IF_GETFILLCOLOUR(2612),
IF_GETINVOBJECT(2700),
IF_GETINVCOUNT(2701),
IF_HASSUB(2702),
IF_GETTOP(2706),
IF_GETTARGETMASK(2800),
IF_GETOP(2801),
IF_GETOPBASE(2802),
IF_CALLONRESIZE(2927),
MES(3100),
ANIM(3101),
IF_CLOSE(3103),
RESUME_COUNTDIALOG(3104),
RESUME_NAMEDIALOG(3105),
RESUME_STRINGDIALOG(3106),
OPPLAYER(3107),
IF_DRAGPICKUP(3108),
CC_DRAGPICKUP(3109),
MOUSECAM(3110),
GETREMOVEROOFS(3111),
SETREMOVEROOFS(3112),
OPENURL(3113),
RESUME_OBJDIALOG(3115),
BUG_REPORT(3116),
SETSHIFTCLICKDROP(3117),
SETSHOWMOUSEOVERTEXT(3118),
RENDERSELF(3119),
SETSHOWMOUSECROSS(3125),
SETSHOWLOADINGMESSAGES(3126),
SETTAPTODROP(3127),
GETTAPTODROP(3128),
GETCANVASSIZE(3132),
SETHIDEUSERNAME(3141),
GETHIDEUSERNAME(3142),
SETREMEMBERUSERNAME(3143),
GETREMEMBERUSERNAME(3144),
SOUND_SYNTH(3200),
SOUND_SONG(3201),
SOUND_JINGLE(3202),
CLIENTCLOCK(3300),
INV_GETOBJ(3301),
INV_GETNUM(3302),
INV_TOTAL(3303),
INV_SIZE(3304),
STAT(3305),
STAT_BASE(3306),
STAT_XP(3307),
COORD(3308),
COORDX(3309),
COORDZ(3310),
COORDY(3311),
MAP_MEMBERS(3312),
INVOTHER_GETOBJ(3313),
INVOTHER_GETNUM(3314),
INVOTHER_TOTAL(3315),
STAFFMODLEVEL(3316),
REBOOTTIMER(3317),
MAP_WORLD(3318),
RUNENERGY_VISIBLE(3321),
RUNWEIGHT_VISIBLE(3322),
PLAYERMOD(3323),
WORLDFLAGS(3324),
MOVECOORD(3325),
ENUM_STRING(3400),
ENUM(3408),
ENUM_GETOUTPUTCOUNT(3411),
FRIEND_COUNT(3600),
FRIEND_GETNAME(3601),
FRIEND_GETWORLD(3602),
FRIEND_GETRANK(3603),
FRIEND_SETRANK(3604),
FRIEND_ADD(3605),
FRIEND_DEL(3606),
IGNORE_ADD(3607),
IGNORE_DEL(3608),
FRIEND_TEST(3609),
CLAN_GETCHATDISPLAYNAME(3611),
CLAN_GETCHATCOUNT(3612),
CLAN_GETCHATUSERNAME(3613),
CLAN_GETCHATUSERWORLD(3614),
CLAN_GETCHATUSERRANK(3615),
CLAN_GETCHATMINKICK(3616),
CLAN_KICKUSER(3617),
CLAN_GETCHATRANK(3618),
CLAN_JOINCHAT(3619),
CLAN_LEAVECHAT(3620),
IGNORE_COUNT(3621),
IGNORE_GETNAME(3622),
IGNORE_TEST(3623),
CLAN_ISSELF(3624),
CLAN_GETCHATOWNERNAME(3625),
CLAN_ISFRIEND(3626),
CLAN_ISIGNORE(3627),
STOCKMARKET_GETOFFERTYPE(3903),
STOCKMARKET_GETOFFERITEM(3904),
STOCKMARKET_GETOFFERPRICE(3905),
STOCKMARKET_GETOFFERCOUNT(3906),
STOCKMARKET_GETOFFERCOMPLETEDCOUNT(3907),
STOCKMARKET_GETOFFERCOMPLETEDGOLD(3908),
STOCKMARKET_ISOFFEREMPTY(3910),
STOCKMARKET_ISOFFERSTABLE(3911),
STOCKMARKET_ISOFFERFINISHED(3912),
STOCKMARKET_ISOFFERADDING(3913),
TRADINGPOST_SORTBY_NAME(3914),
TRADINGPOST_SORTBY_PRICE(3915),
TRADINGPOST_SORTFILTERBY_WORLD(3916),
TRADINGPOST_SORTBY_AGE(3917),
TRADINGPOST_SORTBY_COUNT(3918),
TRADINGPOST_GETTOTALOFFERS(3919),
TRADINGPOST_GETOFFERWORLD(3920),
TRADINGPOST_GETOFFERNAME(3921),
TRADINGPOST_GETOFFERPREVIOUSNAME(3922),
TRADINGPOST_GETOFFERAGE(3923),
TRADINGPOST_GETOFFERCOUNT(3924),
TRADINGPOST_GETOFFERPRICE(3925),
TRADINGPOST_GETOFFERITEM(3926),
ADD(4000),
SUB(4001),
MULTIPLY(4002),
DIV(4003),
RANDOM(4004),
RANDOMINC(4005),
INTERPOLATE(4006),
ADDPERCENT(4007),
SETBIT(4008),
CLEARBIT(4009),
TESTBIT(4010),
MOD(4011),
POW(4012),
INVPOW(4013),
AND(4014),
OR(4015),
SCALE(4018),
APPEND_NUM(4100),
APPEND(4101),
APPEND_SIGNNUM(4102),
LOWERCASE(4103),
FROMDATE(4104),
TEXT_GENDER(4105),
TOSTRING(4106),
COMPARE(4107),
PARAHEIGHT(4108),
PARAWIDTH(4109),
TEXT_SWITCH(4110),
ESCAPE(4111),
APPEND_CHAR(4112),
CHAR_ISPRINTABLE(4113),
CHAR_ISALPHANUMERIC(4114),
CHAR_ISALPHA(4115),
CHAR_ISNUMERIC(4116),
STRING_LENGTH(4117),
SUBSTRING(4118),
REMOVETAGS(4119),
STRING_INDEXOF_CHAR(4120),
STRING_INDEXOF_STRING(4121),
OC_NAME(4200),
OC_OP(4201),
OC_IOP(4202),
OC_COST(4203),
OC_STACKABLE(4204),
OC_CERT(4205),
OC_UNCERT(4206),
OC_MEMBERS(4207),
OC_PLACEHOLDER(4208),
OC_UNPLACEHOLDER(4209),
OC_FIND(4210),
OC_FINDNEXT(4211),
OC_FINDRESET(4212),
CHAT_GETFILTER_PUBLIC(5000),
CHAT_SETFILTER(5001),
CHAT_SENDABUSEREPORT(5002),
CHAT_GETHISTORY_BYTYPEANDLINE(5003),
CHAT_GETHISTORY_BYUID(5004),
CHAT_GETFILTER_PRIVATE(5005),
CHAT_SENDPUBLIC(5008),
CHAT_SENDPRIVATE(5009),
CHAT_PLAYERNAME(5015),
CHAT_GETFILTER_TRADE(5016),
CHAT_GETHISTORYLENGTH(5017),
CHAT_GETNEXTUID(5018),
CHAT_GETPREVUID(5019),
DOCHEAT(5020),
CHAT_SETMESSAGEFILTER(5021),
CHAT_GETMESSAGEFILTER(5022),
GETWINDOWMODE(5306),
SETWINDOWMODE(5307),
GETDEFAULTWINDOWMODE(5308),
SETDEFAULTWINDOWMODE(5309),
CAM_FORCEANGLE(5504),
CAM_GETANGLE_XA(5505),
CAM_GETANGLE_YA(5506),
CAM_SETFOLLOWHEIGHT(5530),
CAM_GETFOLLOWHEIGHT(5531),
LOGOUT(5630),
VIEWPORT_SETFOV(6200),
VIEWPORT_SETZOOM(6201),
VIEWPORT_CLAMPFOV(6202),
VIEWPORT_GETEFFECTIVESIZE(6203),
VIEWPORT_GETZOOM(6204),
VIEWPORT_GETFOV(6205),
WORLDLIST_FETCH(6500),
WORLDLIST_START(6501),
WORLDLIST_NEXT(6502),
WORLDLIST_SPECIFIC(6506),
WORLDLIST_SORT(6507),
SETFOLLOWEROPSLOWPRIORITY(6512),
NC_PARAM(6513),
LC_PARAM(6514),
OC_PARAM(6515),
STRUCT_PARAM(6516),
ON_MOBILE(6518),
CLIENTTYPE(6519),
BATTERYLEVEL(6524),
BATTERYCHARGING(6525),
WIFIAVAILABLE(6526),
WORLDMAP_GETMAPNAME(6601),
WORLDMAP_SETMAP(6602),
WORLDMAP_GETZOOM(6603),
WORLDMAP_SETZOOM(6604),
WORLDMAP_ISLOADED(6605),
WORLDMAP_JUMPTODISPLAYCOORD(6606),
WORLDMAP_JUMPTODISPLAYCOORD_INSTANT(6607),
WORLDMAP_JUMPTOSOURCECOORD(6608),
WORLDMAP_JUMPTOSOURCECOORD_INSTANT(6609),
WORLDMAP_GETDISPLAYPOSITION(6610),
WORLDMAP_GETCONFIGORIGIN(6611),
WORLDMAP_GETCONFIGSIZE(6612),
WORLDMAP_GETCONFIGBOUNDS(6613),
WORLDMAP_GETCONFIGZOOM(6614),
WORLDMAP_GETCURRENTMAP(6616),
WORLDMAP_GETDISPLAYCOORD(6617),
WORLDMAP_COORDINMAP(6621),
WORLDMAP_GETSIZE(6622),
WORLDMAP_PERPETUALFLASH(6628),
WORLDMAP_FLASHELEMENT(6629),
WORLDMAP_FLASHELEMENTCATEGORY(6630),
WORLDMAP_STOPCURRENTFLASHES(6631),
WORLDMAP_DISABLEELEMENTS(6632),
WORLDMAP_DISABLEELEMENT(6633),
WORLDMAP_DISABLEELEMENTCATEGORY(6634),
WORLDMAP_GETDISABLEELEMENTS(6635),
WORLDMAP_GETDISABLEELEMENT(6636),
WORLDMAP_GETDISABLEELEMENTCATEGORY(6637),
WORLDMAP_LISTELEMENT_START(6639),
WORLDMAP_LISTELEMENT_NEXT(6640),
MEC_TEXT(6693),
MEC_TEXTSIZE(6694),
MEC_CATEGORY(6695),
MEC_SPRITE(6696);
public final int opcode;
ScriptOpcode(int opcode)
{
this.opcode = opcode;
}
private static final Map<Integer, ScriptOpcode> map;
static
{
ImmutableMap.Builder<Integer, ScriptOpcode> builder = ImmutableMap.builder();
for (ScriptOpcode value : values())
{
builder.put(value.opcode, value);
}
map = builder.build();
}
public static String nameFromID(int opcode)
{
ScriptOpcode op = map.get(opcode);
if (op == null)
{
return null;
}
return op.name();
}
}

View File

@@ -31,6 +31,7 @@ import net.runelite.deob.deobfuscators.mapping.AnnotationIntegrityChecker;
import net.runelite.deob.deobfuscators.mapping.AnnotationMapper;
import net.runelite.deob.deobfuscators.mapping.Mapper;
import net.runelite.deob.deobfuscators.mapping.ParallelExecutorMapping;
import net.runelite.deob.deobfuscators.transformers.ScriptOpcodesTransformer;
import net.runelite.deob.util.JarUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -72,6 +73,8 @@ public class UpdateMappings
ParameterRenamer pr = new ParameterRenamer(group1, group2, mapping);
pr.run();
new ScriptOpcodesTransformer().transform(group2);
}
public void save(File out) throws IOException