2010-09-16 40 views
8

Tôi thực sự hy vọng có một số trợ giúp để có được về chủ đề này. Có ai từng sử dụng lua trong một ứng dụng cần hỗ trợ cả 32 bit và 64 bit không? Chúng tôi hiện đang chuyển sang 64-bit nhưng gặp sự cố với các tập lệnh lua được biên dịch bởi khách hàng mà chúng tôi không thể biên dịch lại bản thân bằng phiên bản 64 bit. Vì vậy, trong thực tế, chúng ta cần có khả năng tải các tệp bytecode được biên dịch bằng cách sử dụng lua 32-bit trong một ứng dụng 64-bit. Khi chúng tôi cố gắng làm như vậy chúng tôi nhận được một thông báo lỗi:lua vấn đề chuyển đổi 64 bit

máy ảo không phù hợp trong test.bin.lua: kích thước của size_t là 8 nhưng đọc 4

Vâng tất nhiên đây là một vấn đề 64bit đang chuyển đổi rõ ràng. Điều khó khăn là chỉ để tìm ra những gì cần làm về nó mà không có khả năng biên dịch lại các tập tin nhị phân.

Cảm ơn

+1

lưu ý rằng việc tải bytecode không được khuyến khích. an toàn hơn và di động hơn là tải mã nguồn. – Javier

Trả lời

1

Bạn có thể thử LuaDec: "LuaDec is a decompiler for the Lua language." Tôi không biết nhiều về nó, và các trang web nói rằng nó nhắm Lua 5.0.2. Vì vậy, nó có thể không làm việc ra khỏi hộp, nhưng nó tốt hơn so với bắt đầu từ đầu.

3

Không khó để thích ứng với lundump.c để đọc các tệp bytecode 32 bit. Tôi đã đăng một lộ trình cho điều này trong danh sách gửi thư Lua. Nếu bạn gặp sự cố, vui lòng gửi email cho tôi.

+0

Tôi quan tâm đến chủ đề này. Bạn có một bài đăng danh sách gửi thư của mình không? – Andreas

+0

@Andreas, có thể là: http://lua-users.org/lists/lua-l/2006-06/msg00205.html – lhf

+0

Cảm ơn. Nó thực sự rất tầm thường vì tôi chỉ cần sửa đổi 'lundump.c' để có thể xử lý kích thước' size_t' là 4 byte * và * 8 byte. Sau sửa đổi này, các phiên bản 32-bit của chương trình của tôi giờ đây có thể chạy bytecode một cách kỳ diệu được tạo ra bởi phiên bản 64 bit và ngược lại. Tất nhiên nó sẽ không hoạt động trên 32-bit nếu có thực sự là một chuỗi với hơn 2^32 byte dữ liệu nhưng đó là khá không chắc tôi đoán :) Một điều tôi đã thay đổi là 'Instruction' typedef từ 'unsigned long 'to' unsigned int' vì các lệnh nên là 32-bit. Lưu ý rằng tôi vẫn còn trên Lua 5.0.2. – Andreas

Các vấn đề liên quan