PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LIBRARY herrausfinden



central
04-07-2006, 02:07
Guten Morgen,
ich möchte bzw muss aus einem Verzeichniss die Abängikeiten von ausführbaren Dateien herausfinden.
So in der Art wie es ldd macht.
Nur habe ich leider überhaubt keine Ahnung wie ich das bewerkstelligen soll.
Über eine Tip wo ich ansetzen könnte würde ich mich freuen.

gruß

central

anda_skoa
04-07-2006, 13:21
Der Titel des Beitrags sagt du willst Libraries herausfinden, der Text sagt etwas über Executables. :confused:

Vielleicht kannst du ein Beispiel angeben?

Ciao,
_

central
04-07-2006, 15:27
Ok ich versuche das mal genauer zu erklären .
Mein Anliegen ist ein eine initrd zu erstellen.
Wenn ich nun die '/bin/sh' zu meiner initrd kopiere brauch ich natürlcih auch die librarys von denn sie abhängt.
was ldd ja auch shön zeigt.


ldd /bin/sh
libncurses.so.5 => /usr/lib64/libncurses.so.5 (0x00002b6b8322b000)
libdl.so.2 => /lib/libdl.so.2 (0x00002b6b83387000)
libc.so.6 => /lib/libc.so.6 (0x00002b6b8348b000)
/lib64/ld-linux-x86-64.so.2 (0x00002b6b83113000)

Davon brauche ich nur den Pfad inkl library um sie dann in meine initrd zu kopieren.

Ich hatte es erst mit mit execl versucht da ich execlp nicht verwenden möchte bzw kann da das programm root rechte benötigt.
Das sah dann so aus


std::string meinbefehl = "/usr/sbin/ldd /bin/sh >> tempfile";
execl( execl("/bin/sh", "sh","-c", meinbefehl.c_str() ,NULL);

klappte natürlich nicht da cat nicht gefunden wird :(

Nun meine Frage gibt es eine Funktion die mir Abhängkeiten anzeigen kann ?

Oder wie könnte ich das sonst bewerkstelligen ?

gruß

central

almoeli
05-07-2006, 09:13
Hi,

brauchst du das in einem selber geschriebenen Programm, oder langt dir auch ne Shell Lösung. Die könnte z.B. so aussehen (jetzt halt für den ls Befehl):



ldd /bin/ls | awk -F'=> ' '{print $2}' | sed 's/ (0x.*)//g' | grep -v '^$'


Gruß

almoeli

central
05-07-2006, 16:28
Dank dir almoeli,
das ist genau das was ich erreichen möchte aber als c/c++ funktion .
Alternativ könnte ich natürlich auch mein Programm als sh skript schreiben dann wäre es sicherlich schon fertig :) .
Ich sehe mein Programm eher so als Übung für mich , und dann kann ich nicht einfach wenn es schwierig wird aufgeben ;)

Also wenn Jemand weiß wie man das machen kann , dann nur raus damit.

gruß

central

Joghurt
07-07-2006, 00:11
Schau dir doch den Quellcode von ldd an.

central
07-07-2006, 13:19
Hallo Joghurt,
das hab ich natürlich als erstes gemacht aber
ldd ist ein bash skript.

gruß

central