Luaスクリプトをバイトコードにコンパイル
このチュートリアルでは、Luaスクリプトをバイトコードにコンパイルする方法をご紹介いたします。バイトコードでコンパイルすることにより、FlashAir内に保存したLuaスクリプトを難読化することが出来ます。
はじめに
- FlashAirにFlashAirでLuaを実行するで使用した
HelloWorld.lua
を設置します。 - FlashAirでLuaを実行するを参考に、Luaスクリプト実行方法をCONFIGファイルに指定します。
コンパイル
LuaスクリプトをバイトコードにコンパイルするLuaスクリプトを作成します。Lua標準関数の string.dumpを使用します。
/CompileToByteCode.lua
function luac_func(filename)
local targets = filename
local chunk = assert(loadfile(filename))
local out = assert(io.open(targets..".out", "wb"))
out:write(string.dump(chunk))
out:close()
end
luac_func("HelloWorld.lua")
このスクリプトを実行した後カードを抜き差しすると、HelloWorld.lua.out
ファイルが作成されます。
バイトコード化したLuaファイルを実行する
ファイル名が異なるまま動作させると、requireなどが正しく動作しない場合があるため、元になったファイルHelloWorld.lua
のファイル名を_HelloWorld.lua
に変更し、HelloWorld.lua.out
を元のファイル名のHelloWorld.lua
に変更して実行します。
また、バイトコード化したファイルを呼び出すLuaスクリプトを作成します。Lua標準関数の dofileを使用することも可能です。
/ExecuteByteCode.lua
dofile("/HelloWorld.lua")
このスクリプトを保存しカードを抜き差しした後実行すると、バイトコード化した
HelloWorld.lua
の実行結果が表示されます。出力はFlashAirでLuaを実行すると同様になります。
バイトコード化したファイル内の関数やオブジェクトを使用する
バイトコード化したLuaファイルを異なるLuaファイルから呼び出してみます。 まずは、tableオブジェクトを返すLuaスクリプトを作成します。
/ReturnTable.lua
local function _foo()
print("Hello World!")
end
return {
foo=_foo
}
他ファイル内の関数やオブジェクトを使用する場合はLua標準関数の requireを使用し、ファイルを読み込みます。呼び出し側のLuaスクリプトも作成します。
/CallByteCode.lua
local script = require "ReturnTable"
script.foo()
ReturnTable.lua
をコンパイルし、バイトコード化します。カードを抜き差しした後CallByteCode.lua
を実行すると「Hello World!」が表示されます。
サンプルコード
このサイトのサンプルコードは二条項BSDライセンスで提供されています。