2011-10-31 93 views
1

我是Lua的新手,我正在爲Wireshark建立一個自定義解剖器。我的情況是這樣的:Lua的Wireshark解剖器 - userdata

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錯誤:...:呼籲壞自我「添加」(用戶數據預期,得到的字符串)。

我該如何解決這個問題?我需要完全不同的方法嗎?我不想找任何複雜或花哨的東西。我所需要做的就是我所描述的。任何幫助,將不勝感激。

回答

3

ReverseOrder3Numbers沒有什麼錯(除了可能還有一些缺失local限定符)。您應該更新您的問題以包含調用add的代碼。

您可能不小心使用了tree.add(...)而不是tree:add(...)(注意tree之後的冒號)。

0

致電tree:add()將發送到對象「樹」作爲第一個隱含參數的「樹」本身的直接鏈接。無論你有多少參與此次電話會議,或者根本沒有人蔘加。如果'add'方法不支持自連接,請使用tree.add() sintax。在這種情況下,'self'應該鏈接到'add'方法內的'tree'對象。

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是在一個情況下,後綴和其他的前綴。

相關問題