Исходник DisLua - анализ байт-кода LuaJIT 2.1

imring

чо тут
Администратор
Lampo Team
DisLua - это Lua библиотека, которая анализирует байт-код скомпилированных скриптов LuaJIT. Поддерживает исключительно версию LuaJIT v2.1.

Получить список опкодов
Пример Lua кода:
Lua:
-- file.lua
function add(a, b)
    return a + b
end

local function sub(a, b)
    return a - b
end

number_1 = 123
local number_2 = 100
print(add(number_1, number_2))
print(sub(number_1, number_2))
Компилируем данный файл:
Код:
$ luajit -b file.lua file.luac
Запускаем файл test.lua:
Код:
$ luajit test.lua
Enter path to file: file.luac
Start.
End. Total time: 0.002 sec.
И получаем список опкодов:
Lua:
-- BYTECODE -- file.luac:00000006-00000015
-- size: 0000000f args: 2 opcodes: 2
0000000d    ADDVV (32)    2    0    1
00000011    RET1 (76)    2    2

-- BYTECODE -- file.luac:00000016-00000025
-- size: 0000000f args: 2 opcodes: 2
0000001d    SUBVV (33)    2    0    1
00000021    RET1 (76)    2    2

-- BYTECODE -- file.luac:00000026-0000008e
-- size: 00000068 args: 0 opcodes: 19
0000002d    FNEW (51)    0    0 ; -- file.luac:00000006-00000015
00000031    GSET (55)    0    1 ; "add"
00000035    FNEW (51)    0    2 ; -- file.luac:00000016-00000025
00000039    KSHORT (41)    1    123
0000003d    GSET (55)    1    3 ; "number_1"
00000041    KSHORT (41)    1    100
00000045    GGET (54)    2    4 ; "print"
00000049    GGET (54)    3    1 ; "add"
0000004d    GGET (54)    4    3 ; "number_1"
00000051    MOV (18)    5    1
00000055    CALL (66)    3    0    3
00000059    CALLM (65)    2    1    0
0000005d    GGET (54)    2    4 ; "print"
00000061    MOV (18)    3    0
00000065    GGET (54)    4    3 ; "number_1"
00000069    MOV (18)    5    1
0000006d    CALL (66)    3    0    3
00000071    CALLM (65)    2    1    0
00000075    RET0 (75)    0    1
В будущем
  • Получение дебаг информации.
  • Сохранение изменённых protos.
Ссылка на библиотеку:
 
Сверху