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


Date: Thu, 24 Jan 2019 08:35:53 +0100
From: Andreas Ziegler <ziegler@xxxxxxxxx>
Subject: Re: [DynInst_API:] Enumerating linked shared libraries with SymtabAPI/ ParseAPI
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

[← Prev in Thread] Current Thread [Next in Thread→]