2009-08-10 11 views
3

Ich überprüfe die Quelle von/usr/bin/ldd, ich sehe, dass es ld-linux verwendet, um die Abhängigkeiten einer ausführbaren Datei zu finden, obwohl es zuerst ld-linux mit --verify aufruft Streit. Dann verhält sich das Skript entsprechend dem Exit-Code des ld-linux --verify-Aufrufs anders.ld-linux --verify exit codes

Die man-Seite für ld-linux bietet keine Informationen über Exit-Codes, und eine Google-Suche wird nichts wert. Gibt es irgendeine Dokumentation (außer durch den Quellcode von ld-linux), die eine Liste von Exit-Codes für ld-linux --verfify und ihre jeweilige Bedeutung enthält?

Antwort

1

Ich habe einige Experimente und Exit-Status ist Null bei Erfolg und 1 bei Ausfall. Dies schließt grotesken Missbrauch ein, wie beispielsweise die Aufforderung, ein Shell-Skript zu verifizieren.

Sie würden sicher davon ausgehen, dass bei Erfolg null, bei Fehlern null und keine anderen Informationen angenommen werden.

+0

Das ist leider nicht der Fall. Null ist in der Tat "Erfolg", aber es gibt eine Fülle von Nicht-Null-Werten, mit viel Bedeutung für jeden. zB verhält sich ldd in einer Richtung, wenn der Rückgabewert entweder 0 oder 2 ist, und andersherum, wenn der Rückgabewert 5 ist. Ich habe jedoch keine Ahnung was 2 bedeutet (5 bedeutet "mit __libc_enable_secure aufgerufen nach einem Kommentar im Skript) Also kann ich nur annehmen, 2 bedeutet etwas, und es gibt eine 3 und eine 4 (mindestens). – Fred

+0

@Fred: Bletch. Sie haben uns nicht gesagt, warum Sie wissen müssen, aber der einzige Rat, den ich für Sie übrig habe ist vor langer Zeit und weit, weit weg: benutze die Quelle, Luke! –

1

ich keine Dokumentation das finden, aber ...

if (__builtin_expect (mode, normal) == verify) 
    { 
     /* We were called just to verify that this is a dynamic 
     executable using us as the program interpreter. Exit with an 
     error if we were not able to load the binary or no interpreter 
     is specified (i.e., this is no dynamically linked binary. */ 
     if (main_map->l_ld == NULL) 
     _exit (1); 

     /* We allow here some platform specific code. */ 
#ifdef DISTINGUISH_LIB_VERSIONS 
     DISTINGUISH_LIB_VERSIONS; 
#endif 
     _exit (has_interp ? 0 : 2); 
    } 

So ...

  • 0 bedeutet Erfolg, das heißt „Programm ist dynamisch verknüpft und diese dynamischen Linker Griff Es "
  • 1 bedeutet ld-linux war" nicht in der Lage, die binäre zu laden "(Ich habe dies, wenn ich ld-linux mit nicht-existenten, nicht-binäre oder statische binäre Datei lief)
  • 2 bedeutet "kein Interpreter ist angegeben". Genauer gesagt Tabelle gibt es kein Element mit p_type gleich PT_INTERP in Programmkopf (ich das, wenn ich ld-linux mit Shared Library laufen)

Es gibt keine anderen Codes.

Verwandte Themen