1

Lua は初めてで、Wireshark 用のカスタム ディセクタを作成しています。私の状況はこれです:

Wireshark データは、4321 8765 CBA9 などの 16 進数で構成されます。私が巻き上げたいのは(解剖された後):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: ...: calling '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

function に何を渡すかは明確ではありません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 に答える
0

呼び出しtree:add()は、最初の暗黙の引数として「tree」自体への直接リンクをオブジェクト「tree」に送信します。そして、この呼び出しにどれだけの引数をアタッチするか、まったくアタッチしないかは関係ありません。tree.add()「add」メソッドがセルフリンクをサポートしていない場合は、sintaxを使用してください。この場合、「self」は「add」メソッド内の「tree」オブジェクトにリンクする必要があります。

于 2011-11-03T22:34:11.967 に答える