标签: luajit

标准Lua字节码和LuaJIT字节码之间的差异

我一直在尝试反编译一个LuaJIT字节码文件.我设法拆卸它(但找不到任何方法重新组装它).所以我正在考虑编写一些软件来从LuaJIT字节码转换为标准的Lua字节码,然后通过LuaDec很好地运行.

但是LuaJIT字节码和标准Lua字节码之间有什么区别?

lua bytecode luajit

5
推荐指数
2
解决办法
4066
查看次数

什么是"loadall.so"?

用luajit查看默认的Lua cpath:

luajit -e "print(package.cpath)"

我明白了:

./?.so;/usr/local/lib/lua/5.1/?.so;/usr/local/luajit/lib/lua/5.1/?.so;/usr/local/lib/lua/5.1/loadall.so

这是什么目的loadall.so?它实际上并不存在于我的Linux系统上.

lua luajit

5
推荐指数
1
解决办法
457
查看次数

是否可以使用luajit ffi的c ++命名空间中的函数?

我有很多c ++代码,在命名空间中包含很多函数和类(例如,boost).
现在我试图将LuaJiT2作为脚本引擎嵌入,但我找不到任何关于调用函数和使用命名空间中的其他东西的东西.
那么,是否可以使用FFI将函数从c ++命名空间传递给LuaJIT?

c++ lua luajit

4
推荐指数
1
解决办法
2053
查看次数

如何将cdata结构转换为lua字符串?

我正在编写一个需要在LuaJit中读取一些复杂二进制消息的小应用程序.

我一直在使用bit模块和string.rep.然而,这一切都非常麻烦.我是使用LuaJit的新手,并认为使用FFI可能会有更简单的方法.

在CI中可以声明这样的结构:

struct mystruct
{
  uint32_t field1;
  char     field2[6];
  uin64_t  field3;
  short    field4;
} __attribute__(packed);
Run Code Online (Sandbox Code Playgroud)

在阅读LuaJit的FFI时,你似乎可以宣布

ffi.cdef[[
    #pragma pack(1)
    struct mystruct
    {
      uint32_t field1;
      char     field2[6];
      uin64_t  field3;
      short    field4;
    };
]]
Run Code Online (Sandbox Code Playgroud)

然后我可以创建一个mystruct并访问这样的字段:

local ms = ffi.new("mystruct")
ms.field1 = 32;
// ... etc
Run Code Online (Sandbox Code Playgroud)

但是,如何将其转换为lua字符串?

我尝试了这个,但它似乎没有做我想要的.

local s = tostring(ms)
Run Code Online (Sandbox Code Playgroud)

还有这个:

local s = ffi.string(ms)
Run Code Online (Sandbox Code Playgroud)

产生以下错误"错误的参数#1到'字符串'(不能将'struct mystruct'转换为'const char*')"

所以我试了一个演员:

local s = ffi.string(ffi.cast("char*", ms))
Run Code Online (Sandbox Code Playgroud)

没有错误,但它在电线上看起来不对.

lua ffi luajit

4
推荐指数
1
解决办法
6767
查看次数

LuaJIT相当于wlua.exe

在Windows中,我想知道是否有一种使用LuaJIT的等效方式,如标准的Lua分发wlua.exe,它是无窗口的.或者我应该编译模块并在标准的Lua解释器中使用它们?(不确定这是否可行).

windows lua luajit

4
推荐指数
1
解决办法
897
查看次数

垃圾收集中的 luajit 段错误

我对使用 定义的用户数据有疑问ffi.metatype。当对象被垃圾收集时,我会遇到段错误。这是代码。

ffi = require("ffi")
srate = 48000

ffi.cdef[[
typedef struct sin_state {
    float _now;   // time of last eval
    float _last;  // result of last eval
    float _freq;  // frequency
    float _gain;  // gain
    float _phase; // phase
    float _w;     // angular speed in radians/sample
    float _p;     // update parameter
    float _y[3];  // last 3 steps
} sin_t;
]]

sin = {}

sin.mt = {
    __call = function(s,now)
        if s._now < now then
            s._now = now
            s._phase …
Run Code Online (Sandbox Code Playgroud)

lua garbage-collection luajit

4
推荐指数
1
解决办法
609
查看次数

ffi.C缺少所有符号的所有声明

我在文档中看到ffi.C.free是我可以用来释放malloc的东西.我试图在这里这样做:

callbacks.free_buffer = function(buffer) 
  print("free_buffer_callback") 
  ffi.C.free(buffer)
end
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

missing declaration for symbol 'free'
Run Code Online (Sandbox Code Playgroud)

这是否意味着我必须首先使用FFI来记忆内存?我不能在这个特定的函数中做到这一点(因为它是回调中的参数).我该怎么做才能释放这个缓冲区?

编辑:看起来所有的ffi.C函数都不起作用,即使在回调函数之外也是如此.我的ffi似乎工作正常吗?

c++ malloc lua ffi luajit

4
推荐指数
1
解决办法
635
查看次数

如何在Torch REPL中更改工作目录

标题说明了,如何更改Torch REPL中的工作目录?我尝试使用os.execute('cd some_dir')调用,但这不起作用,如此处所示.

th> pwd() --prints:/ home/user/Code
th> os.execute('cd ..') --prints:true exit 0
th> pwd() - print:/ home/user/Code

其中pwd()是一个调用os.execute('pwd')的便捷函数.

lua luajit torch

4
推荐指数
1
解决办法
2060
查看次数

如何将lua字符串转换为C char*?

我已经使用luajit ffi库来包装一个C库,其中包含一个在ppm文件上绘制文本的函数:

void drawText(frameBuffer *fb, int px, int py, char* text, pixel color) 
Run Code Online (Sandbox Code Playgroud)

当我尝试使用字符串从lua调用它时,我收到此错误bad argument #4 to 'drawText' (cannot convert 'string' to 'char *').它看起来不像lua字符串库有任何东西可以将整个字符串转换为字节数组或任何我可以充分操作的东西.

有关如何在没有修改C代码的情况下在lua端执行此操作的任何提示?

c lua ffi luajit

4
推荐指数
2
解决办法
3309
查看次数

如何使用 lua 关键字作为表键?

问题

当我使用dolua 关键字作为表的键时,会出现以下错误

> table.newKey = { do = 'test' }
stdin:1: unexpected symbol near 'do'
>

Run Code Online (Sandbox Code Playgroud)

我需要用作do密钥。我应该怎么办 ?

lua luajit lua-table

4
推荐指数
1
解决办法
1268
查看次数

标签 统计

lua ×10

luajit ×10

ffi ×3

c++ ×2

bytecode ×1

c ×1

garbage-collection ×1

lua-table ×1

malloc ×1

torch ×1

windows ×1