向lua解析器中的子树添加可变长度int/float/string数组字段

问题描述 投票:0回答:1

我正在实现 WireShark 解析器,我有一个技术问题(我仍在学习 lua 解析器的细节)。

特别是,我想将 int/float/string 项添加到基于可变长度数组的剖析子树(长度取决于从首选项加载的文件)。

我想避免创建与数组中的项目一样多的 ProtoField(我不知道长度),我剖析的数组具有一致的项目类型,它们要么都是 int,要么都是 float,或者都是 string。

我在堆栈溢出中没有看到如何实现这一目标的问题。

lua wireshark-dissector
1个回答
0
投票

假设协议侦听器模式,您可以简单地添加以获得子树,然后在循环中添加值,例如:

function DecoderListener:setParameter(widgetID, paramID, value)
    if (type(value) == "table") then
        local array_tree = self.subtree:add(paramID)
        if #value >= 1 then
            for i, value0 in ipairs(value) do
                self:setArrayParameter(array_tree, value0, i)
            end
        end
    end
end

function DecoderListener:setArrayParameter(array_tree, value, index)
    local real_value = value:getValue()
    -- this can handle int/float/string real values
    array_tree:add(real_value)
end

这将导致 Wireshark 中的元素折叠为您指定的所有值。

© www.soinside.com 2019 - 2024. All rights reserved.