【问题标题】:lua 64-bit transitioning issuelua 64位转换问题
【发布时间】:2011-04-13 02:56:32
【问题描述】:

我真的希望对这个主题有所帮助。有没有人在需要同时支持 32 位和 64 位的应用程序中使用过 lua?我们目前正在过渡到 64 位,但在客户端编译的 lua 脚本方面遇到了问题,我们无法使用 64 位版本重新编译自己。所以实际上我们需要能够在 64 位应用程序中加载使用 32 位 lua 编译的字节码文件。当我们尝试这样做时,我们会收到一条错误消息:

test.bin.lua 中的虚拟机不匹配:size_t 的大小为 8 但读取为 4

当然,这是一个明显的 64 位转换问题。困难的事情是在没有重新编译二进制文件的能力的情况下弄清楚如何处理它。

谢谢

【问题讨论】:

  • 请注意,不鼓励加载字节码。更安全、更便携的是加载源代码。

标签: 64-bit lua 32-bit 32bit-64bit


【解决方案1】:

调整 lundump.c 以读取 32 位字节码文件并不难。我已经在 Lua 邮件列表中发布了一个路线图。如果您有问题,请给我发电子邮件。

【讨论】:

  • 我对这个主题很感兴趣。你有一个到你的邮件列表的帖子吗?
  • 谢谢。这实际上非常简单,因为我只需要修改 lundump.c 就能够处理 4 字节 8 字节的 size_t 大小。修改后,我的程序的 32 位版本现在可以神奇地运行 64 位版本生成的字节码,反之亦然。当然,如果确实有一个包含超过 2^32 字节数据的字符串,它将无法在 32 位上工作,但我猜这不太可能:) 我必须更改的另一件事是来自 unsigned longInstruction typedef unsigned int 因为指令应该是 32 位的。请注意,我仍在使用 Lua 5.0.2。
  • @Andreas,感谢您的反馈。考虑更新到 Lua 5.0.3,这是 Lua 5.0 的最后一个版本。
【解决方案2】:

你可以试试LuaDec: "LuaDec is a decompiler for the Lua language." 我对此了解不多,网站声明它针对 Lua 5.0.2。因此,它可能无法开箱即用,但比从头开始要好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多