2010-09-16 8 views
8

Ich hoffe wirklich, es gibt etwas Hilfe, um zu diesem Thema zu bekommen. Hat jemand jemals Lua in einer Anwendung verwendet, die sowohl 32-Bit- als auch 64-Bit-Unterstützung benötigt? Wir sind derzeit im Übergang zu 64-Bit, haben aber Probleme mit Client-kompilierten Lua-Skripten, die wir nicht mit der 64-Bit-Version neu kompilieren können. In der Tat müssen wir Bytecode-Dateien laden können, die mit 32-Bit-Lua in einer 64-Bit-Anwendung kompiliert wurden. Wenn wir versuchen, so zu tun, erhalten wir eine Fehlermeldung:Lua 64-Bit-Übergang Problem

virtuelle Maschine Mismatch in test.bin.lua: Größe von size_t 8 ist aber lesen 4

Nun, natürlich ist dies ein klares 64bit transitioning Problem. Das Schwierige ist nur herauszufinden, was man dagegen tun kann, ohne die Binärdateien neu kompilieren zu können.

Dank

+1

Beachten Sie, dass das Laden von Bytecode nicht empfohlen wird. sicherer und portabler ist das Laden des Quellcodes. – Javier

Antwort

1

Sie könnten LuaDec: "LuaDec is a decompiler for the Lua language." versuchen Ich weiß nicht viel darüber, und die Website heißt es, dass es 5.0.2 Lua zum Ziel hat. Also, es funktioniert vielleicht nicht out of the box, aber es ist besser als von Grund auf neu zu starten.

3

Es ist nicht schwer, lundump.c anzupassen, um 32-Bit-Bytecode-Dateien zu lesen. Ich habe dazu in der Lua-Mailingliste eine Roadmap veröffentlicht. Wenn Sie Probleme haben, senden Sie mir bitte eine E-Mail.

+0

Ich interessiere mich für dieses Thema. Hast du einen Eintrag in deiner Mailingliste? – Andreas

+0

@Andreas, wahrscheinlich das: http://lua-users.org/lists/lua-l/2006-06/msg00205.html – lhf

+0

Danke. Es war wirklich wirklich trivial, da ich nur 'lundump.c' modifizieren musste, um mit' size_t' Größen von 4 Bytes * und * 8 Bytes umgehen zu können. Nach dieser Änderung sind die 32-Bit-Versionen meines Programms nun in der Lage, den von der 64-Bit-Version erzeugten Bytecode auf magische Weise auszuführen und umgekehrt. Natürlich wird es nicht auf 32-Bit funktionieren, wenn es wirklich eine Zeichenfolge mit mehr als 2^32 Bytes Daten gibt, aber das ist ziemlich unwahrscheinlich, denke ich :) Eine andere Sache, die ich ändern musste, war der 'Anweisung' Typedef von' unsigned long 'zu' unsigned int', weil Anweisungen 32-Bit sein sollten. Beachten Sie, dass ich immer noch auf Lua 5.0.2 bin. – Andreas