问题:“创建协议字段中尝试索引全局变量'base'”。

我正在尝试为 Wireshark 编写 Lua 解析器。我需要解析头字段版本 = 4 个字节(0x00000000)

我的代码:

do
    local asc_sccp = Proto("asc_sccp", "ASC Skinny Client Control Protocol")
    local f = asc_sccp.fields
    f.length = ProtoField.bytes("asc_sccp.length", "length")
    f.version = ProtoField.uint8("asc_sccp.version", "version", base.HEX, 0xC)
    function asc_sccp.init()
    end
    function asc_sccp.dissector(buffer, pinfo, tree)
        local subtree = tree:add(asc_sccp, buffer())
        local offset = 0
        pinfo.cols.protocol = asc_sccp.name
        local length = buffer(offset, 4)
        subtree:add(f.length, length)
        subtree:append_text("Data length: " .. length)
        offset = offset + 4
        local version = buffer(offset, 4)
        subtree:add(f.version, version)
        subtree:append_text("    Version: " .. version)
    end
    local tcp_table = DissectorTable.get("tcp.port")
    tcp_table:add(2000, asc_sccp)
end

我为什么会收到错误“尝试对全局变量'base'(空值)进行索引”? 您能否帮忙,我查看了许多解析器示例,但找不到解决方案。

原文链接 https://stackoverflow.com/questions/10450701

点赞
stackoverflow用户1368932
stackoverflow用户1368932

在这行代码中:

f.version = ProtoField.uint8("asc_sccp.version", "version", base.HEX, 0xC)

你正在访问变量“base”。具体来说,你正在通过告诉 Lua 它是一个包含键“HEX”的表索引它,并尝试检索该键的值。除非你在某个地方定义变量“base”作为表(或用户数据),并在“HEX”键处添加一个值,否则 Lua 将抱怨你正在尝试索引名为“base”的全局变量,而它实际上是 nil (即不存在)。

2012-05-05 05:18:22
stackoverflow用户409638
stackoverflow用户409638

这可能是因为 init.lua 没有安装。这在基于 Redhat 的发行版(如 Fedora,Centos,RHEL 等)中可能发生,如果没有安装开发包。查看此处的答案: https://stackoverflow.com/a/40489742/409638

2016-11-10 15:33:52