Hi,
jumping into the conversation as I'm also doing research on shared
libraries and (in a broader sense) instrumentation as part of my PhD at
the University Erlangen-NÃrnberg. :)
On 1/24/19 4:18 AM, Buddhika Chamith Kahawitage Don wrote:
It doesn't seem to provide the full path to the linked library, just the
library name. So when I use the return value to construct a
SymtabCodeSource it fails. Any idea how to get the full path of the
linked library?
That depends on your current system and the execution environment. If
you're looking at the executable or shared library using 'readelf' (for
example with the -e parameter), you see that the file itself will only
specify the (file-)name of the library it requires. The actual
resolution to an absolute path is done in the linker and will take
default library search paths as well as the LD_LIBRARY_PATH and
LD_PRELOAD environment variables into account.
If you're on the system you want to analyze and want to see which
libraries a given binary loads, try running 'ldd' on the binary in
question, this will run the linker up to the point right before
execution is handed over to the binary itself and print all imported
libraries as well as their paths.
I'm quite interested in what you're working on, if you'd like you can
drop me a private mail.
Regards,
Andreas
On Wed, Jan 23, 2019 at 10:20 PM Buddhika Chamith Kahawitage Don
<budkahaw@xxxxxx <mailto:budkahaw@xxxxxx>> wrote:
Great! I will check this out.
Cheers
Buddhika
On Wed, Jan 23, 2019 at 10:01 PM Xiaozhu Meng <xmeng@xxxxxxxxxxx
<mailto:xmeng@xxxxxxxxxxx>> wrote:
Hi,
If I am going to do it, I will try Symtab::getDependencies(),
which should return a vector of paths of the dependencies:
https://github.com/dyninst/dyninst/blob/master/symtabAPI/h/Symtab.h#L366
Then, you can iterate over the vector to parse each of them.
Thanks,
--Xiaozhu
On Wed, Jan 23, 2019 at 10:20 AM Buddhika Chamith Kahawitage Don
<budkahaw@xxxxxx <mailto:budkahaw@xxxxxx>> wrote:
Hi All,
I need to enumerate and parse linked shared libraries of a
binary using Symtab API and Parse API. How can I do that? I
am currently using below code sequence to parse the binary.
 Dyninst::SymtabAPI::Symtab* symtab;
 bool isParsable =
Dyninst::SymtabAPI::Symtab::openFile(symtab, binary);
 if (isParsable == false) {
ÂÂÂ const char* error = "error: file can not be parsed";
ÂÂÂ std::cout << error;
ÂÂÂ return;
 }
 // Create a new binary code object from the filename argument
 Dyninst::ParseAPI::SymtabCodeSource* sts =
ÂÂÂÂÂ new Dyninst::ParseAPI::SymtabCodeSource(binary.c_str());
 Dyninst::ParseAPI::CodeObject* co = new
Dyninst::ParseAPI::CodeObject(sts);
 co->parse();
 auto fit = co->funcs().begin();
 for (; fit != co->funcs().end(); ++fit) {
ÂÂÂ Dyninst::ParseAPI::Function* f = *fit;
ÂÂÂ ....
 }
Regards
Buddhika
_______________________________________________
Dyninst-api mailing list
Dyninst-api@xxxxxxxxxxx <mailto:Dyninst-api@xxxxxxxxxxx>
https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api
_______________________________________________
Dyninst-api mailing list
Dyninst-api@xxxxxxxxxxx
https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api
|