2011-09-30 71 views
0

在基於Lua的解剖器中,我想將tvb內容轉換爲其他tvb。代碼:bytearray:set_size(5)失敗Lua Wireshark

local strbuf = buffer(offset, strlen * 2) -- range from tvb 
offset = offset + strlen * 2 

local inbytes = strbuf:bytes() 
local outbytes = ByteArray.new()    
outbytes:set_size(strlen) -- fails; using a number instead strlen fails to 

失敗消息是expected userdata, got number。爲什麼要set_size期望用戶數據?或者,我該如何分配給定大小的ByteArray?

+0

沒有確切知道ByteArray.set_size的期望,很難給你一個答案。如果你提供了一個鏈接來解釋「基於Lua的解析器」是什麼,或者你正在使用哪一個解析器,這將有所幫助。 – kikito

+0

@kikito這是wireshark lua的API文檔:http://www.wireshark.org/docs/wsug_html_chunked/lua_module_Tvb.html – ron

+0

@ron,我無法在OSX上的Wireshark 1.7.0中重現此操作(上面的代碼沒有問題)。你正在運行哪個Wireshark版本和操作系統? – 2011-09-30 23:39:32

回答

0

看來,你發現在他們的實現中的錯誤。根據他們自己的API,創建一個空的ByteArray並不與使用set_size不兼容。

我找不到它的一個問題跟蹤,但你可以嘗試送你發現他們的郵件列表的bug:https://www.wireshark.org/mailman/listinfo/wireshark-dev

作爲一個解決辦法,你嘗試過只用一個空字符串初始化的ByteArray?

local outbytes = ByteArray.new("") -- notice the empty string here    
outbytes:set_size(strlen) 
+0

是的,使用任何初始化字符串(甚至大於set_size參數)仍然會在稍後產生set_size錯誤。但是lhf的解決方案可以用來創建一個初始的字符串緩衝區,只需要合適的大小 – ron

+1

Wireshark的錯誤應該提交給http://bugs.wireshark.org(http://bugs.wireshark.org)。 – 2011-09-30 23:40:24

0

下工作,但不是太優雅:

local s = "" 
for i = 0, strlen-1 do 
    s = s .. "ff" 
end 
local outbytes = ByteArray.new(s)    
+3

循環可以用's = string.rep(「ff」,strlen)'替換。 – lhf