Re: [DynInst_API:] Enumerating linked shared libraries with SymtabAPI/ ParseAPI


Date: Thu, 24 Jan 2019 08:48:40 +0530
From: Buddhika Chamith Kahawitage Don <budkahaw@xxxxxx>
Subject: Re: [DynInst_API:] Enumerating linked shared libraries with SymtabAPI/ ParseAPI
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?

On Wed, Jan 23, 2019 at 10:20 PM Buddhika Chamith Kahawitage Don <budkahaw@xxxxxx> wrote:
Great! I will check this out.

Cheers
Buddhika

On Wed, Jan 23, 2019 at 10:01 PM Xiaozhu Meng <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:


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> 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
https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api
[← Prev in Thread] Current Thread [Next in Thread→]