Я сейчас пишу какой-нибудь диссектор для Wireshark в Lua. Код Lua стал довольно большим. Из-за этого я делю его на несколько файлов (модулей). Я получил это работает. Кстати, моя цель состоит в том, чтобы пользователю просто нужно было скопировать файлы в каталог плагинов, чтобы диссектор автоматически загружался при каждом запуске Wireshark.
Теперь, чтобы получить доступ к другим файлам из " Основной файл "Мне нужно сделать это:
package.prepend_path(".\plugins\3.3\modulesDir")
local mymodule= require "module"
Это прекрасно работает, но имеет некоторые недостатки. Наиболее важно, если пользователь использует другую версию Wireshark, мне нужно изменить путь в коде Lua. То же самое, если это другой каталог (Linuy, Ma c OS).
Чтобы обойти это, я провел некоторое исследование о том, как получить путь к текущему файлу Lua и придумал следующее:
local moduleDir = debug.getinfo(2, "S").source:sub(2)
moduleDir = moduleDir:match("(.*[/\\])")
Эта платформа работает независимо, поэтому она выглядит идеальным решением для того, что я хочу. Если я выполню это с помощью Wireshark> Инструменты> Lua> Оценить, это работает отлично.
НО: если я делаю это в файле Lua (который является моим диссектором), то я получаю ошибку "попытка проиндексировать нулевое значение ". Я пробовал разные версии этой строки, но всегда кажется, что таблица отладки равна нулю. Я использую Wireshark версии 3.3.
Кто-нибудь знает, как запустить его? Или другой подход к получению каталога, в котором находится файл Lua? Заранее спасибо.