在Wireshark Lua分析器中,“get_index”的第1个参数错误(索引超出范围)

在我的解析器中,我有以下代码:

local defaultdata = data_tvb():bytes()
local newdata = ByteArray.new()
newdata:set_size(defaultdata:len())
for i=0,defaultdata:len()-2 do
local var = bit.band((bit.lshift(defaultdata:get_index(i), 1) + bit.rshift(defaultdata:get_index(i+1), 7)), 0xff)
newdata:set_index(i, var) end
local var = bit.band((bit.lshift(defaultdata:get_index(defaultdata:len()-1), 1) + bit.rshift(defaultdata:get_index(0), 7)), 0xff)
newdata:set_index(defaultdata:len()-1,var)
data_tvb = ByteArray.tvb(newdata, "Decoded") end

我的问题出现在get_index函数中的第二个位运算中。

我知道,问题可能在于get_index(0)get_index(defaultdata:len()-1),因为 Lua 中没有零索引的元素(并不是 C 中那样),但实际上使用其他值也无效。

无论使用任何值,我都会得到以下消息:bad argument #1 to 'get_index' (index out of range),因此,如上所述,与此代码无关的部分正常工作。

点赞
用户2801364
用户2801364

几乎忘了发布解决方案。

问题是我的分析器没有涵盖空应用程序协议有效负载的情况,这就是我遇到这些错误的原因。解决方案是添加一个 "if" 语句,检查有效负载的长度。

2014-02-14 16:10:22