• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Luachunk文件结构

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1.lua执行经过:

  xx.lua源码文件-------》执行(lua虚拟机)

                                                            隐式调用luac编译器

我们可以直接用luac命令去编译lua源码文件,然后用编译后的文件运行在lvm(lua虚拟机),具体过程如下:

                                                          显示调用luac编译器


 

2.简要说明

   lua编译器是以函数为单位进行编译,每一个函数都会被Lua编译器编译为一个内部结构,这个结构叫“原型”。原型主要包括6个部分:函数基本信息(包括参数数量、局部变量数量等)、字节码、常量表、upvalue表、调试信息、子函数原型列表。由此可知,函数原型是一种递归结构,并且Lua源码中函数的嵌套关系会直接反映在编译后的原型里。

  lua编译器会自动为我们的脚步添加一个main函数(即主函数),并且把整个程序都放进这个函数里,然后再以它为起点进行编译,那么自然就把整个程序都编译出来了。这个主函数不仅是编译的起点,也是未来Lua虚拟机解释执行程序时的入口。

  如xx.lua源码文件中 就一句代码  

 print("hello world!")

  那么经过Lua编译器加工之后就编程了下面这样:

  function main()
      print("hello world!")
      return
  end

3.分析luac编译器编译后的.out文件结构组成(lua5.3版本,每个版本略显不同!具体可参考源码中dump和undump文件)

   总体结构图如下:

header头部结构

Java代码头

// chunk头
    private static class Header{
        private static final byte[] LUA_SIGNATURE    = {0x1b, 'L', 'u', 'a'};   // 头 ESC/l/u/a
        private static final int    LUAC_VERSION     = 0x53;    // 版本
        private static final int    LUAC_FORMAT      = 0;       // 格式
        private static final byte[] LUAC_DATA        = {0x19, (byte) 0x93, '\r', '\n', 0x1a, '\n'}; // 格式数据
        private static final int    CINT_SIZE        = 4;       // cint占字节数
        private static final int    CSIZET_SIZE      = 8;       // size_t占字节数
        private static final int    INSTRUCTION_SIZE = 4;       //Lua指令占字节数
        private static final int    LUA_INTEGER_SIZE = 8;       //Lua整数占字节数
        private static final int    LUA_NUMBER_SIZE  = 8;       // Lua浮点数占字节数
        private static final int    LUAC_INT         = 0x5678;  // 测试字节大小端
        private static final double LUAC_NUM         = 370.5;   // 测试浮点数
    }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
cocos2dx使用lua和protobuf发布时间:2022-07-22
下一篇:
cocos2dx3.0导出自定义类到lua的方法详细步骤发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap