From 97c558956ea81103ec9923b464618eb773b04883 Mon Sep 17 00:00:00 2001 From: CPunch Date: Thu, 15 Aug 2019 11:25:34 -0500 Subject: [PATCH] updated example --- README.md | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 619b8ab..caa5819 100644 --- a/README.md +++ b/README.md @@ -10,15 +10,30 @@ chunk = lc.compileC("test.lua") print("\n===== [[Disassembly]] =====\n") -for z in chunk['INSTRUCTIONS']: - i = chunk['INSTRUCTIONS'][z] - if (i['TYPE'] == "ABC"): - print(luac.lua_opcode_names[i['OPCODE']], i['A'], i['B'], i['C']) - elif (i['TYPE'] == "ABx"): - if (i['OPCODE'] == 1 or i['OPCODE'] == 5): - print(luac.lua_opcode_names[i['OPCODE']], i['A'], -i['Bx']-1, chunk['CONSTANTS'][i['Bx']]['DATA']) - else: - print(luac.lua_opcode_names[i['OPCODE']], i['A'], -i['Bx']-1) +def dis_chunk(chunk): + print("==== [[" + str(chunk['NAME']) + "]] ====\n") + for z in chunk['PROTOTYPES']: + print("** decoding proto\n") + dis_chunk(chunk['PROTOTYPES'][z]) + + print("\n==== [[" + str(chunk['NAME']) + "'s constants]] ====\n") + for z in chunk['CONSTANTS']: + i = chunk['CONSTANTS'][z] + print(str(z) + ": " + str(i['DATA'])) + + print("\n==== [[" + str(chunk['NAME']) + "'s dissassembly]] ====\n") + + for z in chunk['INSTRUCTIONS']: + i = chunk['INSTRUCTIONS'][z] + if (i['TYPE'] == "ABC"): + print(luac.lua_opcode_names[i['OPCODE']], i['A'], i['B'], i['C']) + elif (i['TYPE'] == "ABx"): + if (i['OPCODE'] == 1 or i['OPCODE'] == 5): + print(luac.lua_opcode_names[i['OPCODE']], i['A'], -i['Bx']-1, chunk['CONSTANTS'][i['Bx']]['DATA']) + else: + print(luac.lua_opcode_names[i['OPCODE']], i['A'], -i['Bx']-1) + +dis_chunk(chunk) ``` or just parse lua bytecode