AddrLookup.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef __AddrLookup_H__
00032 #define __AddrLookup_H__
00033
00034 #include "Annotatable.h"
00035 #include <map>
00036
00037 namespace Dyninst {
00038
00039 class AddressTranslate;
00040 class LoadedLib;
00041
00042 namespace SymtabAPI {
00043
00044 typedef struct {
00045 std::string name;
00046 Address codeAddr;
00047 Address dataAddr;
00048 } LoadedLibrary;
00049
00050 class AddressLookup : public AnnotatableSparse
00051 {
00052 private:
00053 AddressTranslate *translator;
00054 AddressLookup(AddressTranslate *trans);
00055 static dyn_hash_map<std::string, std::vector<Symbol *> > syms;
00056 int getSymsVector(std::string str);
00057 std::vector<Symbol *> *getSymsVector(LoadedLib *lib);
00058
00059 std::map<Symtab *, LoadedLib *> sym_to_ll;
00060 std::map<LoadedLib *, Symtab *> ll_to_sym;
00061
00062 LoadedLib *getLoadedLib(Symtab *sym);
00063 Dyninst::Address symToAddress(LoadedLib *ll, Symbol *sym);
00064 Symtab *getSymtab(LoadedLib *);
00065 public:
00066 SYMTAB_EXPORT static AddressLookup *createAddressLookup(ProcessReader *reader = NULL);
00067 SYMTAB_EXPORT static AddressLookup *createAddressLookup(PID pid, ProcessReader *reader = NULL);
00068 SYMTAB_EXPORT static AddressLookup *createAddressLookup(const std::vector<LoadedLibrary> &name_addrs);
00069
00070 SYMTAB_EXPORT bool getAddress(Symtab *tab, Symbol *sym, Address &addr);
00071 SYMTAB_EXPORT bool getAddress(Symtab *tab, Offset off, Address &addr);
00072
00073 SYMTAB_EXPORT bool getSymbol(Address addr, Symbol* &sym, Symtab* &tab, bool close = false);
00074 SYMTAB_EXPORT bool getOffset(Address addr, Symtab* &tab, Offset &off);
00075
00076 SYMTAB_EXPORT bool getAllSymtabs(std::vector<Symtab *> &tabs);
00077 SYMTAB_EXPORT bool getLoadAddress(Symtab* sym, Address &load_addr);
00078 SYMTAB_EXPORT bool getDataLoadAddress(Symtab* sym, Address &load_addr);
00079
00080 SYMTAB_EXPORT bool getLoadAddresses(std::vector<LoadedLibrary> &name_addrs);
00081 SYMTAB_EXPORT bool getExecutable(LoadedLibrary &lib);
00082 SYMTAB_EXPORT bool getOffset(Address addr, LoadedLibrary &lib, Offset &off);
00083
00084 SYMTAB_EXPORT bool refresh();
00085
00086 SYMTAB_EXPORT Address getLibraryTrapAddrSysV();
00087
00088 SYMTAB_EXPORT virtual ~AddressLookup();
00089 };
00090
00091 }
00092 }
00093
00094 #endif