Is there a simple and efficient way to know that a given dynamically linked ELF
is missing a required .so for it to run, all from the inside of a C/C++ program?
I need a program with somewhat similar functionality as ldd
, without trying to execute the ELF
to find out the (met/unmet) dependencies in the system. Perhaps asking the ld-linux.so utility via some library? (I'm a newbie in this part of linux =)
NOTE: reading the source code of
ldd
was not very helpful for my intentions: it seems thatldd
is in fact forking another process and executing the program.
If it's not possible to know that a program has unmet dependencies without executing it, is there some way to, at least, quickly list the .so's required for that ELF
all from within my program?
Thanks in advance =)
As per ld.so(8), setting the environment variable LD_TRACE_LOADED_OBJECTS
to a non-empty string will give ldd
-like results (instead of executing the binary or library normally).
setenv("LD_TRACE_LOADED_OBJECTS", "1", 1);
FILE *ldd = popen("/lib/libz.so");
Have you tried dlopen
function? you can use this to load a dynamic library (or, for your case, to ckeck if a library can be loaded).
Having a list of needed libraries is more difficult, take a look to handle_dynamic
function on readelf source
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With