Basically what the title asks.
Being a bit unfamiliar with C++
, and the more advanced concepts such as symbol tables, I've looked into it online but am struggling to find any direction towards what my end goal is. Most of the tutorials I've seen cater to C, and the closest question I've found (here) puts me at a brick wall, as I've tried compiling it but I'm not getting the desired results, and I'm not too solid on how extern "C"
works yet.
By the end of this, I want to be able to access a variable from the symbol table, and change the variable. I have played around with nm
and objdump
(and coming from a hardware background, it's definitely cool to look at), and I looked into dlsym
, dlopen
, etc. but I'm not sure how that could help me (especially since I've seen it used in C more than anything else).
Any advice or small snippets of code (so I can write my own sample program) would be great. Just to add, this is on a Linux system with a sort of outdated version of G++ (I'm not on the machine right now so I don't have that information) and I don't have access to upgrade it right now.
Here's an example program that shows how to use
dlsym
to look up a symbol:The
extern "C"
bit prevents name mangling, ensuring the symbol table entry is simply the"my_variable"
text passed todlsym()
. You could not useextern "C"
and provide a mangled name, but that would be compiler specific.To compile the code, use:
The
-ldl
is the library fordlsym
, and-rdynamic
asks not to discard symbol information for seemingly unused variables (see here):Output on my machine:
@TonyD has essentially the correct answer. For a more detailed discussion of how to use the shared libraries, this is a pretty decent tutorial