0

I’m attempting to write a C wrapper for a shared library that would expose it to lua so that it can be called by a lua plugin.

I recreated the error with minimal code, using the following four files:

/usr/lib/x86_64-linux-gnu/wireshark/plugins/lua_test.lua: this is just one line, "require(c_wrapper)"

/usr/lib/x86_64-linux-gnu/wireshark/plugins/c_wrapper.c: this has the shared library's header file in its includes and exposes shared_lib's functionality (one function) to lua

/home/user/Desktop/shared_lib/shared_lib.c and shared_lib.h: these contain the shared_function (a void function that takes no parameters)

I compile shared_lib.c to shared_lib.so with the following command:

gcc -shared -o shared_lib.so -fPIC shared_lib.c

And compile c_wrapper.c to c_wrapper.so with:

gcc -O2 -fPIC -I/usr/include/lua5.2 -I/usr/Desktop/shared_lib -c c_wrapper.c -o c_wrapper.o

gcc -shared -o c_wrapper.so c_wrapper.o

And then I copied c_wrapper.so to /usr/lib/x86_64-linux-gnu/lua/5.2 so that Wireshark could find it (I also tried copying shared_lib.so to this directory but it didn't make any difference.)

When I run wireshark, I get the following error:

Lua: Error during loading:
error loading module 'c_wrapper' from file '/usr/lib/x86_64-linux-gnu/lua/5.2/c_wrapper.so':
    /usr/lib/x86_64-linux-gnu/lua/5.2/c_wrapper.so: undefined symbol: shared_function
stack traceback:
    [C]: in ?
    [C]: in function 'require'
    /usr/lib/x86_64-linux-gnu/wireshark/plugins/lua_test.lua:1: in main chunk

It looks like including the header for shared_lib wasn’t sufficient, as shared_function is the function from shared_lib that c_wrapper attempts to expose to lua. I’m not sure if doing this via a wrapper is even possible, or if I need to go in and modify the original code of the shared lib and expose it to lua directly.

Running Wireshark 3.6.2 on Ubuntu 22.04.1 VM with Windows host, gcc is version 11.4.0 and lua is version 5.2. Please let me know if there's any more information that would be useful. I tried to include the code in c_wrapper.c but for whatever reason the question editor had a problem with it; if needed I can try adding it via an edit.

Any help is appreciated! Thank you for reading.

jerome
  • 1
  • 2

0 Answers0