Die dlopen
Rückgabe ist ein undurchsichtiger void *
Zeiger, aber es ist wirklich ein Zeiger auf eine struct link_map
.
Sie müssen die Quelle zu glibc
bekommen. Suchen Sie im Unterverzeichnisund dann in der Datei link.h
nach einer Definition von struct link
.
Aber während Sie dort sind, schauen Sie sich ein wenig um, und sehen Sie, wie viel Code es gibt, implementieren Sie dlopen
, dlsym
, et. al. Es gibt eine Reihe anderer Strukturen, mit denen Sie sich befassen müssen. Dies ist nur die Spitze des Eisbergs.
Für was ich versuche zu erreichen, habe ich Beispielcode gesehen, der eine Pseudo-Struktur verwendet, um richtige Speicherausrichtung und Zugriffselemente zu erzwingen.
Es könnte helfen, wenn Sie erklären, was Sie erreichen wollen: „Das sind nicht die Droiden Sie suchen“
Ich bin mir nicht sicher, was Sie richtige bedeuten durch Erzwingen Speicherausrichtung für den Zugriff auf Mitglieder. Warum musst du die Ausrichtung (und was) erzwingen? Und auf welche Mitglieder beziehen Sie sich?
Ja, es ist ein Zeiger auf 'struct link_map', was ich wollte, um die ganze Liste von geteilten Objekten zu durchlaufen. Vielen Dank. – John
Habe einfach mehr geprüft. 'link.h' [und' elf.h'] befinden sich in '/ usr/include', also könnte es einfacher sein. Dies bedeutet auch, dass, während der ursprüngliche Zeiger undurchsichtig ist, das Neuschreiben eine etwas (d. H. Auf Expertenebene) unterstützte Aktion ist. Siehe auch 'dl_interate_phdr'. Auf jeden Fall hat Glibcs Elf-Subdir eine Menge Code, der als Leitfaden dienen kann. –
Excellent thanks 'dl_iterate_phdr' ist genau das, was ich brauche. – John