Dear John, Thanks a lot for your reply, that was exactly the issue and really helped me get unstuck. I've got it working now by using the WS_DLL_PUBLIC. Will think of how to best move forward.
Cheers! Robin On Wed, Feb 21, 2024 at 12:57 AM John Thacker <johnthac...@gmail.com> wrote: > On Tue, Feb 20, 2024 at 6:09 PM R Massink <robin....@gmail.com> wrote: > >> Hello, >> >> I've been active in creating a dissector for IEC61850, which is mapped on >> top of mms. There is an integrated mms dissector that I'm using as a >> template, while mapping all mms names to the IEC61850 equivalent. I have >> been able to successfully use asn2wrs.py to generate a packet dissector >> from the .cnf and .asn files, and can build a static wireshark executable >> with my dissector included. >> >> However, I'm now trying to get the same dissector to work as an external >> plugin, so it can be loaded by others into their wireshark without having >> to use my compiled version of wireshark. >> >> While the external plugin compiled fine, i'm running into the problem >> that the dissector_acse_* external symbols cannot be >> resolved(dissect_acse_EXTERNALt is the first one) during runtime. The >> dissector relies on these symbols from epan/dissectors/packet-acse.c, and >> as statically build dissector they can of course be resolved. But when the >> plugin loads externally during runtime(manual or automatic), the symbol >> cannot be resolved anymore, while I can find it in libwireshark.so, which >> is in turn loaded into memory by the wireshark process. >> >> I was not able to find other wireshark examples where external plugins >> relied on symbols from statically linked dissectors. Is what I want simply >> not possible, and should I include all acse dissector, and sub dependencies >> as well in my plugin(lots of code duplication), or am I building the plugin >> not correct or missing a linker flag? >> > > The issue is not exactly in your plugin, but in the other dissector. > > Example where external plugins use symbols from dissectors in the main > tree: > > opcua/opcua.c uses tcp_dissect_pdus from epan/dissectors/packet-tcp.h > > By default symbols are not visible. To make a symbol visible, it must have > WS_DLL_PUBLIC, which is defined in include/ws_symbol_export.h > > (See some comments here: > https://gitlab.com/wireshark/wireshark/-/blob/master/CMakeLists.txt#L1087 > ) > > WS_DLL_PUBLIC void > tcp_dissect_pdus(...); > > For a ASN.1 generated dissector, to cause an existing symbol to be > exported, look at this commit: > > > https://gitlab.com/wireshark/wireshark/-/commit/7ce05b9dd77741bf28a1efece8429f43982e7fe2 > > Where I altered the .cnf file for the x509af dissector so that > dissect_x509af_Certificate > got the WS_DLL_PUBLIC > attribute added to it by the asn2wrs.py process. > > Cheers, > John Thacker > > > ___________________________________________________________________________ > Sent via: Wireshark-dev mailing list <wireshark-dev@wireshark.org> > Archives: https://www.wireshark.org/lists/wireshark-dev > Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev > mailto:wireshark-dev-requ...@wireshark.org > ?subject=unsubscribe >
___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev@wireshark.org> Archives: https://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe