3

私はwiresharkのluaにディセクタを書き込もうとしています。ヘッダー フィールドのバージョンを解析する必要がある = 4 バイト (0x00000000)

私のコード:

do 

    local asc_sccp =Proto("asc_sccp", "ASC Skinny Client Control Protocol") 

    local f =asc_sccp.fields 


    f.length = ProtoField.bytes("asc_sccp.length", "length")  
    f.version =ProtoField.uint8("asc_sccp.version", "version", base.HEX, 0xC)



    function asc_sccp.init() 
    end  


    function asc_sccp.dissector(buffer,pinfo,tree)

        local subtree = tree:add (asc_sccp, buffer())
        local offset = 0

        pinfo.cols.protocol = asc_sccp.name

        local length = buffer (offset, 4)

        subtree:add (f.length, length)
        subtree:append_text ("Data length: " .. length) 

        offset = offset + 4 

        local version = buffer (offset, 4)

        subtree:add (f.version, version)
        subtree:append_text ("    Version: " .. version)


    end

    local tcp_table = DissectorTable.get("tcp.port") 
    tcp_table:add(2000, asc_sccp)  

end

「グローバル 'ベース' (nil 値) のインデックスを作成しようとしています」というエラーが表示されるのはなぜですか? 助けてください、私は多くのディセクタの例を調べましたが、解決策が見つかりません

4

2 に答える 2

1

このコード行では:

f.version =ProtoField.uint8("asc_sccp.version", "version", base.HEX, 0xC)

変数「ベース」にアクセスしています。具体的には、キー「HEX」を含むテーブルであることをLuaに伝え、そのキーの値を取得しようとすることで、インデックスを作成しています。変数 'base' をどこかでテーブル (またはユーザーデータ) として定義し、キー "HEX" に値を追加しない限り、実際には nil であるのに、'base' というグローバル変数にインデックスを付けようとしていると lua は文句を言います。 (つまり、存在しない)。

于 2012-05-05T05:18:22.370 に答える