1

我是 Lua 的新手,我正在为 Wireshark 构建一个自定义解析器。我的情况是这样的:

Wireshark 数据由十六进制数字组成,例如 4321 8765 CBA9。我想结束的是(在解剖之后):CBA9 8765 4321。

到目前为止,我所做的是在 Lua 中创建一个小函数,它将单独获取这些数字,将它们转换为字符串,并将它们按正确的顺序放置。

function ReverseOrder3Numbers(hex_1, hex_2, hex_3)
local hex_1_int = hex_1:uint()
local hex_2_int = hex_2:uint()
local hex_3_int = hex_3:uint()

word1 = string.format("%04X", hex_1_int)    
word2 = string.format("%04X", hex_2_int)
word3 = string.format("%04X", hex_3_int)

combined_string = "0x" .. word3 .. word2 .. word1

output = combined_string
return output

end

但是,一旦我将这束添加到树中,我会收到一条错误消息 Lua Error: ...: call 'add' on bad self (userdata expected, got string)。

我怎样才能解决这个问题?我需要完全不同的方法吗?我不是在寻找任何复杂或花哨的东西。我需要做的就是我所描述的。任何帮助,将不胜感激。

4

3 回答 3

3

没有什么真正的问题ReverseOrder3Numbers(除了可能缺少一些local限定符)。您应该更新您的问题以包含调用add.

您可能不小心使用tree.add( ... )了代替tree:add( ... )(注意 之后的冒号tree)。

于 2011-11-01T23:52:59.897 回答
0

调用tree:add()将向对象“树”发送到“树”本身的直接链接作为第一个隐式参数。而且无论您将附加多少参数或根本没有附加参数。tree.add()如果您的“添加”方法不支持自链接,请使用sintax。在这种情况下,“self”应该链接到“add”方法中的“tree”对象。

于 2011-11-03T22:34:11.967 回答
0

目前尚不清楚您传递给函数的内容ReverseOrder3Numbers。但是由于您使用uint方法访问这些参数,我假设参数是tvb:range(x,y)结果。如果要更改单个值内的数字顺序,可以使用字节顺序感知方法:

function ReverseOrder3Numbers(hex_1, hex_2, hex_3)
local hex_1_int = hex_1:le_uint()
local hex_2_int = hex_2:le_uint()
local hex_3_int = hex_3:le_uint()
...
end

如果要更改添加到树中的数据的字节序,则应使用该add方法的字节序感知版本。

tree:le_add(f_MyProtoField, tvb:range(x,y), ReverseOrder3Numbers(...))

我不知道为什么le在一种情况下是后缀而在另一种情况下是前缀。

于 2016-11-28T15:12:55.510 回答