Hi Andreas,

Thanks for the input. You are exactly right! :). I was looking for an
output similar to what ldd provides. My use case is to get register usage
patterns in a given binary and its linked shared libraries.

On Thu, Jan 24, 2019 at 7:24 PM Xiaozhu Meng <xm...@cs.wisc.edu> wrote:

> Another approach is to use BPatch_binaryEdit to open the binary, which has
> an option parameter to specify whether also opening its dependencies. Then
> you can convert BPatch_object to ParseAPI::CodeObject by doing:
>
> ParseAPI::CodeObject *ParseAPI::convert(BPatch_object *);
>
>
@ Xiaozhu. I will check this out as well. Thanks!


> On Thu, Jan 24, 2019 at 1:36 AM Andreas Ziegler <zieg...@cs.fau.de> wrote:
>
>> 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
>> > <budka...@iu.edu <mailto:budka...@iu.edu>> wrote:
>> >
>> >     Great! I will check this out.
>> >
>> >     Cheers
>> >     Buddhika
>> >
>> >     On Wed, Jan 23, 2019 at 10:01 PM Xiaozhu Meng <xm...@cs.wisc.edu
>> >     <mailto:xm...@cs.wisc.edu>> 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
>> >         <budka...@iu.edu <mailto:budka...@iu.edu>> 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@cs.wisc.edu <mailto:Dyninst-api@cs.wisc.edu>
>> >             https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api
>> >
>> >
>> > _______________________________________________
>> > Dyninst-api mailing list
>> > Dyninst-api@cs.wisc.edu
>> > https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api
>> >
>>
>
_______________________________________________
Dyninst-api mailing list
Dyninst-api@cs.wisc.edu
https://lists.cs.wisc.edu/mailman/listinfo/dyninst-api

Reply via email to