Wireshark Tvb 中使用的 Lua 语法是什么

what's the Lua syntax used in Wireshak Tvb

在 Wireshark Lua 解析器页面中: https://wiki.wireshark.org/Lua/Dissectors

它说: TvbRange 表示 Tvb 的可用范围,用于从生成它的 Tvb 中提取数据。 TvbRanges 是通过调用 Tvb(例如 'tvb(offset,length)')创建的。如果 TvbRange 跨度超出 Tvb 的范围,创建将导致运行时错误。

-- trivial protocol example
-- declare our protocol
trivial_proto = Proto("trivial","Trivial Protocol")
-- create a function to dissect it
function trivial_proto.dissector(buffer,pinfo,tree)
    pinfo.cols.protocol = "TRIVIAL"
    local subtree = tree:add(trivial_proto,buffer(),"Trivial Protocol Data")
    subtree:add(buffer(0,2),"The first two bytes: " .. buffer(0,2):uint())
    subtree = subtree:add(buffer(2,2),"The next two bytes")
    subtree:add(buffer(2,1),"The 3rd byte: " .. buffer(2,1):uint())
    subtree:add(buffer(3,1),"The 4th byte: " .. buffer(3,1):uint())
end
-- load the udp.port table
udp_table = DissectorTable.get("udp.port")
-- register our protocol to handle udp port 7777
udp_table:add(7777,trivial_proto)

表达式 "buffer(2,1)" 从 Tvb 对象创建一个 TvbRanges,lua 的语法是什么? 在这里,我们将两个参数传递给一个对象,而不是一个函数,什么意思,如何实现?

当您尝试调用不是函数的东西时,Lua 会在其上查找 __call 元方法,如果存在则调用它。对于这个特定的对象,https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Tvb.html#lua_fn_tvb___call__ 表示它等同于对其调用 :range() 方法,例如,您可以将 buffer(2,2) 替换为 buffer:range(2,2)