lua wireshk解剖器:原始场指定者

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

我在LUA中有此协议字段描述符:

local atcs_hdr = {
   region = Protofield.uint16("atcs.rrp.region","Region",base.HEX)
}

产生此树项目:

Region: 0x9AA1

我真正需要的是一个将此十六进制值转换为“ 6817.1”的函数的字符串表示形式:

Region: 6817.1

我有一个进行此转换的本地函数:

local function HexToRegion(val)
    -- input: 0xA70F
    -- output: 9999.1 
    local region = bit.band(val,0x7FFF)
    local dir = 0
    if (bit.band(val,0x8000) == 0x8000) then
        dir = 1
    end
    return string.format("%d.%d",region,dir)
end

但是如何将其链接到Protofield说明符?

编辑:解剖器在此处将这个“区域”添加到树中:

local region_tvbr = tvbuf:range(0,2)
tree:add("atcs.rrp.region",region_tvbr )       
-- Region: 0x9AA1

我可以通过添加字符串函数来获得所需的ALMOST:

local region_tvbr = tvbuf:range(0,2)
local region_val = region_tvbr:uint()
local subtree = tree:add("atcs.rrp.region",region_tvbr)
subtree:append_text("("..HexToRegion(region_val)..")")         
-- Region: 0x9AA1 (6817.1)

但是那不是我想要的。

lua wireshark-dissector
1个回答
0
投票

我认为您应该可以使用set_text来实现所需的功能。例如:

local region_item = tree:add(atcs_hdr.region, tvbuf:range(0, 2))
region_item:set_text("Region: " .. HexToRegion(tvbuf:range(0, 2):uint()))

有关更多信息,请参阅《 Wireshark开发人员指南》中的Section 11.7. Adding information to the dissection tree,或参阅WiresharkLuaAPI/TreeItemWiki页面。

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