forked from GitHub/lad
63 lines
1.4 KiB
Lua
Executable File
63 lines
1.4 KiB
Lua
Executable File
#!/usr/bin/env lua
|
|
|
|
--[[
|
|
Lua Disassembler for Lua 5.2.0
|
|
Version 0.2
|
|
Author: Andre Murbach Maidl
|
|
]]
|
|
|
|
INPUT = "luac.out"
|
|
OUTPUT = "luad.asm"
|
|
LISTING = 0
|
|
DUMPING = true
|
|
|
|
USAGE = [[
|
|
usage: %s [options] [filename]
|
|
Available options are:
|
|
-h print this help
|
|
-l list on luac style (use -l -l for full listing)
|
|
-o name output to file name (default is %s)
|
|
-p parse only
|
|
]]
|
|
|
|
function usage(msg)
|
|
if msg ~= nil then
|
|
io.write(string.format("%s: %s\n", arg[0], msg))
|
|
end
|
|
io.write(string.format(USAGE, arg[0], OUTPUT))
|
|
os.exit(1)
|
|
end
|
|
|
|
function doargs()
|
|
local i = 1
|
|
while i <= #arg do
|
|
if string.find(arg[i], "^-") == nil then
|
|
INPUT = arg[i]
|
|
break
|
|
elseif arg[i] == "-h" then usage()
|
|
elseif arg[i] == "-l" then LISTING = LISTING + 1
|
|
elseif arg[i] == "-o" then i = i + 1
|
|
if arg[i] == nil then usage("'-o' needs argument") else OUTPUT = arg[i] end
|
|
elseif arg[i] == "-p" then DUMPING = false
|
|
else usage(string.format("'%s' unkown option", arg[i]))
|
|
end
|
|
i = i + 1
|
|
end
|
|
end
|
|
|
|
if #arg < 1 then
|
|
usage ("no input file given")
|
|
end
|
|
|
|
doargs()
|
|
|
|
local chunk = assert(loadfile(INPUT))
|
|
local bytecode = string.dump(chunk)
|
|
local disassembler = require("disassembler")
|
|
|
|
local parsed = disassembler.parse(bytecode)
|
|
if LISTING > 0 then disassembler.print_function(parsed, LISTING > 1) end
|
|
if DUMPING then disassembler.write(OUTPUT, parsed) end
|
|
|
|
os.exit(0)
|