0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LuaバイトコードHeader (ver. 5.1~5.3)

Last updated at Posted at 2022-10-13

説明

この記事はLuaのバイトコードの先頭にあるHeaderブロックにどのような情報が含まれているかを、Luaのバージョンごとに集めてあります。(ver 5.4以降は記載がありませんが、以下参考文献のgithubを見ていただければ自力で探すことが可能と考えます。)

注意

Luaのバイトコードは仕様が明文化されてきたわけではないため、例えばマイナーバージョンごとに仕様が異なる可能性もあります(調べた範囲ではそのような言及は見られませんでしたが。)
またこれは記事を読む上での注意事項ですが、ブロックの先頭バイトをアドレス0x01ではなく0x00として記載しているため、C言語の配列のように0x01は2番目のバイトになります。

参考文献 (special thanks to...)

Lua ByteCode header (Lua v5.1)

最初の12バイト (0x00-0x0a) がヘッダー。
header解釈.png
ソース

Lua ByteCode header (Lua v5.2)

最初の18バイト (0x00-0x11) がヘッダー。
例)1B 4C 75 61 52 00 01 04 08 04 08 00 19 93 0D 0A 1A 0A

  • 0x0000-0x0003 (4bytes):シグネチャ(ASCII文字で"\Lua")
    • これによりLuaがbytecodeであると解釈する
  • 0x0004 (1byte):Luaのバージョン。上記例では0x52なので5.2を表す。
  • 0x0005 (1byte):フォーマットのバージョン:0x00=official。他はないはず。
  • 0x0006 (1byte):エンディアンフラグ(0x00=ビッグエンディアン、0x01=リトルエンディアン)
  • 0x0007 (1byte):sizeof(int)
  • 0x0008 (1byte):sizeof(size_t)
  • 0x0009 (1byte):sizeof(Instruction)
  • 0x000a (1byte):sizeof(lua_Number)
  • 0x000b (1byte):整数フラグ(0 = 整数を少数として保持(デフォルト), 1 = 整数型として保持)
  • 0x000c-0x0011 (4bytes):テスト用データ --> 0x19939D9A(LUAC_DATA)

ソース

Lua ByteCode header (Lua v5.3)

最初の33バイト (0x00-0x20) がヘッダー。
例)1B 4C 75 61 53 00 19 93 0D 0A 1A 0A 04 04 04 08 08 78 56 00 00 00 00 00 00 00 00 00 00 00 28 77 40

  • 0x0000-0x0003 (4bytes):シグネチャ(ASCII文字で"\Lua")
    • これによりLuaがbytecodeであると解釈する
  • 0x0004 (1byte):Luaのバージョン。上記例では0x53なので5.3を表す。
  • 0x0005 (1byte):フォーマットのバージョン:0x00=official。他はないはず。
  • 0x0006-0x000b (6bytes):テスト用データ。みんな同じで0x19939D9A1A0A(LUAC_DATA
  • 0x000c (1byte): sizeof(int)
  • 0x000d (1byte): sizeof(size_t)
  • 0x000e (1byte): sizeof(Instruction)
  • 0x000f (1byte): sizeof(lua_Interger)
  • 0x0010 (1byte): sizeof(lua_Number)
  • 0x0011-0x0018 (8bytes): 整数変換テスト用データ --> 0x785600..00 (リトルエンディアンなので実体は0x5678
  • 0x0019-0x0020 (8bytes): 少数変換テスト用データ --> 0x00..287740(IEEE754倍精度, 実体は370.5

ソース

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?