跨架构的luac输出

我正在开发一个针对基于地理位置的 WheriGo(http://wherigo.com)游戏的所谓“弹药筒”。这些弹药筒使用的架构是32位和大端。然而,我的 luac 创建的块是64位和小端。

虽然 WheriGo 有一个在线编译服务,但我更想为自己生成适当的二进制格式。特别是,因为我宁愿在由 loadstring() 加载的剥离块中保留一些模糊的内容,而不是完整的调试信息可用。

那么,我的问题是:生成一个可以为不同架构生成字节代码的 lua 工具链有多难?

点赞
用户2171120
用户2171120

你可以始终作为虚拟机来运行一个32位大端机器,例如Aurélien的预编译图像(Debian/mips)(笔记) 。它会很慢,但是可以很容易地自动化。 (从squeeze升级到至少wheezy,然后获取最新的Lua)

我经常运行像这样的虚拟机...虽然它很慢,但我认为它是批处理:我启动作业(apt或编译),然后偶尔(或:第二天)查看它是否完成。大多数情况下,这非常有效;当然,某些东西在仿真中无法正常工作(例如由于仿真器错误或差异),但是为了获得大端32位Lua,这可能有效。

建议阅读:lua bytecode portability和middle-endian doubles on ARM(都在lua邮件列表上)-由于PocketPC机器大多是ARM,因此您可能会遇到这种情况。最好检查实际的Wherigo套餐以查看它们使用的设置...

这些帖子的要点是:为了使字节码跨架构兼容(Luiz Henrique de Figueiredo说),字节序,sizeof(int),sizeof(size_t),sizeof(Instruction),sizeof(lua_Number)和lua_Number类型必须相同,中间序浮点数(单精度和双精度)确实存在(steve donovan和Dimiter 'malkia' Stanev)。

如果您这样做,请告诉我-我很感兴趣,因为我自己是一个地理缓存玩家(虽然需要弄清楚如何播放套餐,但我的平台没有播放器)。

2013-12-06 00:34:15
用户5129715
用户5129715

如果两个机器上的浮点数表示是兼容的,那么这只需要对ldump.clundump.c进行修改。

需要小心确保类型,例如长整型的大小相同。我已经在x86、x64上为整数lua完成了此操作。

2015-09-03 19:45:29