Что означает "tvb (offset): string ()"? - PullRequest
0 голосов
/ 04 апреля 2019

В эти дни я учусь использовать Lua для написания плагина WireShark. Но я не знаю, что означает tvb(offset):string. Почему неправильно использовать tostring(tvb(offset))? спасибо за ваш ответ

function weibo.dissector(tvb, pinfo, tree)
    local proto_type = tvb(23, 1):uint();
    if(proto_type ~= 0x06) then
        return
    end

    local offset = get_payload_offset(tvb, proto_type)
    local data = tvb(offset):string();
    local i, j = string.find(data, "weibo")
    if(i) then
        pinfo.cols.protocol = weibo.name
        local subtree = tree:add(weibo, tvb(offset+i-1))
        subtree:append_text(", ptn_pos: " .. i .. "-" .. j)
    end
end

1 Ответ

2 голосов
/ 04 апреля 2019

tvb - это Виртуальный буфер Testy .

Tvb («Виртуальный буфер Testy») представляет буфер пакета.Он передается в качестве аргумента слушателям и анализаторам и может использоваться для извлечения информации (через TvbRange) из данных пакета.Помните, что Tvbs могут использоваться только текущим вызовом слушателя или анализатора и уничтожаются, как только возвращается слушатель / анализатор, поэтому ссылки на них не могут использоваться после возврата функции.

Вызов в качестве tvb(смещение) возвращает TvbRange

Диапазон байтов в Tvb, который используется для извлечения данных.TvbRange создается из tvb:__call() или tvb:range([offset] [,length]).

Примечание: tvb - это таблица Lua.Если вы называете это как tvb(), вызывается __call() метаметод .

https://wiki.wireshark.org/LuaAPI/Tvb#tvb:__call.28.29

tvb: __ call ()

Описание

Создает TvbRange из подмножества этого Tvb.То же, что tvb: range ().Не может быть вызван напрямую.

Возвращает

userdata: Новый TvbRange

Один из многих методов TvbRange - tvbrange: string()

tvbrange: string ()

Описание

Получает строку из TvbRange

Возвращает

string: строка, содержащая все байты в TvbRange, включая все нули (например, "a \ 000bc \ 000")

tostring (), с другой стороны, является одной из стандартных функций Lua.

From https://www.lua.org/manual/5.3/manual.html#pdf-tostring

Получает значение любого типа и преобразует его в строку вчеловекочитаемый формат.(Для полного контроля над тем, как числа преобразуются, используйте string.format.) Если у метатаблицы v есть поле __tostring, то tostring вызывает соответствующее значение с аргументом v и использует результат вызова в качестве своего результата.

Поскольку tvb реализует __ tostring () tostring(tvb) вернет возвращаемое значение этого метаметода.

tvb: __ tostring ()

Описание

Получает строковое представление Tvb.Не может быть вызван напрямую.

Возвращает

string: строковое представление

...