2012-04-09 6 views

Antwort

1

Verwenden Sie dladdr. Dokumentation here.

0

Nicht per se, nein; Wenn das Symbol anstelle von dlopen()/dlsym() kompiliert wurde, gibt es kein Handle, das zurückgegeben werden soll. (Die Handle-Abstraktion existiert nur, um dlsym() feine Kontrolle darüber zu ermöglichen, wo es Symbole lädt; es gibt keine solche Kontrolle über den ursprünglichen Link, außer über Linker-Skripte.) Im normalen Ablauf von Ereignissen ist ein Objekt einfach open() ed und mmap() ed andere Details sind innerhalb ld.so verborgen und nur indirekt zugänglich über RTLD_DEFAULT und RTLD_NEXT Parameter zu dlsym(). Wenn Sie dlopen() verwenden, wird erwartet, dass Sie Ihre Griffe im Auge behalten.

0

Die einzige Methode, die ich kenne, ist der Inhalt von /proc/self/maps (und/oder vielleicht smaps) und dann auf das Symbol Adresse verwenden, um analysieren von den Grenzen des abgebildeten .so (Start- und seine Größe), in dem Modul zugeordnet zu berechnen Die Funktion liegt.

Hinweis: /proc/self ist ein Symlink (unter Linux) zur aktuellen Prozess (mit ID <pid>) Meta-Informationen, d. H. /proc/<pid>.

Es ist möglich, dass es einige Programmierschnittstellen zu dieser Information gibt, die Sie verwenden könnten.

Bearbeiten: Ah, also dladdr() wäre diese Schnittstelle.

+0

vielen Dank. Diese Information ist sehr nützlich. aber es ist zu niedriger Ebene. also möchte ich einen anderen Weg versuchen, um zu arbeiten. – pjincz

+0

'dladdr' bietet eine * viel * bessere Methode. –

+0

@Arbeitslos Russisch: Keine streiten. Ich habe darauf hingewiesen, dass es auch eine Programmierschnittstelle geben könnte, die mir damals nicht bekannt war. Und zweifellos wird 'dladdr()' diese Information irgendwie nutzen. Sie könnten meine Antwort zum Beispiel bearbeitet haben. So oder so, lernte etwas und das ist (für mich) der wichtigste Teil. – 0xC0000022L

Verwandte Themen