Dies ist der Befehl abicheck, der im kostenlosen OnWorks-Hosting-Provider über eine unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, Windows-Online-Emulator oder MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
abicheck – Anwendungsbinärdateien auf Aufrufe privater oder sich entwickelnder Symbole überprüfen
Bibliotheken und zur statischen Verknüpfung einiger Systembibliotheken.
ZUSAMMENFASSUNG
Abicheck [-h] [-k] [-a] [-I] [-v] [-f Listendatei] [-oder Outfile] [-P Muster] [-e Muster] [-J
njobs] [-l Bibliothek] [-L ldpath] [(-s|-S) Datenbankdatei] [(-d|-D) Datenbankdatei] [-Ö Datenbankdatei] [-EIN
Listendatei] Dateien
BESCHREIBUNG
Abicheck wird auf Anwendungsbinärdateien ausgeführt und gibt bei jedem der folgenden Ereignisse Warnungen aus
Es werden drei Bedingungen erkannt:
· Privat Symbol Verwendung. Private Symbole sind Funktionen oder Datenvariablen in einer Bibliothek
Paket, die in diesem Paket enthalten sind. Sie werden von den Bibliotheken im Paket verwendet
für die interne Kommunikation und sind nicht Teil der API/ABI, die Anwendungsentwickler verwenden
sollte nutzen.
· Evolving Symbol Verwendung. Sich entwickelnde Symbole sind Funktionen oder Datenvariablen in einer Bibliothek
Pakete, die für die Nutzung durch Entwickler gedacht sind, aber als „evolving“ oder „evolving“ gekennzeichnet sind
„instabil“ in dem Sinne, dass sie in einer späteren Version möglicherweise inkompatibel werden oder verschwinden
des Bibliothekspakets.
· Statisch Verknüpfung. Statische Verknüpfung von Systembibliotheken (z. B. libc.a) in eine
Anwendung ist im Allgemeinen keine gute Idee, da sie an den Code der Systembibliothek gebunden ist
Die Binärdatei der Anwendung ist möglicherweise nicht mehr mit späteren Versionen des Systems kompatibel. Abicheck
versucht, die statische Verknüpfung einiger Systembibliotheken zu erkennen.
Das Standardverhalten besteht darin, für jedes überprüfte Binärobjekt direkte Aufrufe von diesem zu untersuchen
Nur binäres Objekt. Der -l Mit der Option können die Bibliotheken, die das Binärobjekt einbringt, vorhanden sein
Ihre Anrufe wurden ebenfalls überprüft.
OPTIONAL
Die folgenden Optionen werden unterstützt:
-k Überprüfen Sie weiterhin die Binärdateien, auch wenn schwerwiegende Fehler vorliegen (dynamische Linker-Berichte).
ungelöste Symbole, ldd(1) Fehler, keine Symbole erkannt).
-h Drucken Sie die ausführliche Hilfe aus.
-v Ausführlich. Zusätzliche Informationen ausdrucken.
-f Listendatei
Die Listendatei ist eine Datei, die eine Liste der zu überprüfenden Binärobjekte enthält, eines pro Zeile.
Diese Liste wird an alle Dateien angehängt, die als Argumente in der Befehlszeile angegeben werden. Wenn
Listendatei ist „-“, dann wird stdin verwendet.
-o Outfile
Ausgabe schreiben nach Outfile statt Standard.
-p Anleitungen
Ändern Sie die Versionsnamenmusterübereinstimmungskennzeichnung für private Versionssätze. Standard ist
/Privatgelände/ Verwenden einer Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung.
Wenn eine Komponente des regulären Ausdrucks Anleitungen enthält zwei Doppelpunkte hintereinander: patt1::patt2,
Dann wird der Symbolebenenabgleich aktiviert, indem überprüft wird, ob version::symbol or
Bibliothek::Symbol Streichhölzer Anleitungen (wobei der Symbolname, die Version (falls vorhanden) und
Der Basisname der Bibliothek wird ersetzt Symbol, Version und Bibliothek). Zum Beispiel,
-p 'FOO_VERS.*::_foopriv'
or
-p 'libfoo.so.*::_foopriv'
-e Anleitungen
Das gleiche wie -p aber für „sich weiterentwickelnde“ Schnittstellen.
-L ldpath
Setze die LD_LIBRARY_PATH Umgebungsvariable zu ldpath bevor Sie Dynamic aufrufen
Linker. Verwenden -L „“ zum Deaktivieren LD_LIBRARY_PATH.
Wenn einer der Bestandteile von ldpath ist die Zeichenfolge „find“, dann alle gemeinsam genutzten Bibliotheken
in Dateien werden gefunden und ihre Pfade in den „Such“-Speicherort eingefügt. Beachten Sie, dass
Die Reihenfolge wird zufällig sein.
-l Bibliothek
Fügen Sie den Basisnamen oder vollständigen Pfadnamen der gemeinsam genutzten Bibliothek hinzu Bibliothek zur Liste von
Objekte, die für das Tätigen von Privatgesprächen überprüft werden sollen. Diese Option kann mehr als auftreten
einmal auf der Kommandozeile und ist additiv. Standardmäßig sind nur direkte Anrufe von a
Binärdaten zu den Systembibliotheken werden überprüft. Der -l Der Schalter ermöglicht die Überprüfung
Indirekte Aufrufe zB: app -> supportlib -> systemlib.
-a Durchlaufen Sie alle Binärdateien, bevor Sie die Liste aller freigegebenen Dateien überprüfen und sammeln
Objekte. Nehmen Sie den Basisnamen jedes gefundenen gemeinsamen Objekts und tun Sie so, als ob es so wäre
angegeben mit dem -l option option und führen Sie dann die Abicheck-Prüfungen durch. Hier entlang,
Aufrufe von allen „anwendungsinternen“ Objekten werden geprüft und nicht nur die
direkte Anrufe. (Nützlich, wenn gemeinsam genutzte Objekte keine Abhängigkeiten haben
verzeichnet.)
-I Ignorieren Sie gemeinsam genutzte Bibliotheken bei der Prüfung, prüfen Sie nur ausführbare Dateien. Kompatibel mit -a,
Bibliotheken werden zunächst durchsucht, dann aber nicht überprüft.
-d Datenbankdatei, -D dbdatei
Geben Sie eine Fallback-Flatfile-Symboldatenbank für die Dynamik an (öffentlich vs. privat).
prüfen. Diese Klassifizierungen werden verwendet, wenn die Bibliothek nicht versioniert ist (d. h
Die Klassifizierung ist in der Bibliothek selbst nicht vorhanden). Verwenden -D um das nur anzudeuten
Information von dbdatei sollte benutzt werden. Zeilen rein dbdatei kann einer davon sein
Formen:
Bibliothek|Symbol
Bibliothek|Klasse|Symbol
Bibliothek|DATEI=Pfad
Bibliothek muss der vollständige Pfad zur anzugebenden Bibliothek sein (es darf kein
Basisname).
Die ersten Formularmarkierungen Symbol als privat.
Die zweite Form markiert Symbol mit Klasse woher Klasse kann öffentlich, privat oder sein
sich weiterentwickeln.
Das dritte Formular gibt die Datei an Weg sollte bei Bedarf geöffnet werden Bibliothek is
zum ersten Mal begegnet. Datei Weg enthält Zeilen der ersten beiden Formen mit Ausnahme der
Bibliothek Feld. Die dritte Form ist eine Beschleunigung, um die Verarbeitung vieler Klassifizierungen zu vermeiden
Zeilen für Bibliotheken, die im Lauf nie angetroffen wurden.
-O dbdatei
Geben Sie eine Überschreibungsdatei an, um die Symbolklassifizierung für die Dynamik zu ändern
(öffentlicher vs. privater) Test. Das Format für die Override-Datei ist wie folgt:
Bibliothek|Symbol|Klasse
Bei der Bibliothek kann es sich um den vollständigen Pfad oder den Basisnamen handeln. Wenn die Bibliothek „__SKIP__“ ist, ist das Symbol
wird für jede Bibliothek, in der sie gefunden wird, ignoriert. Die Klasse kann „öffentlich“ sein.
„privat“, „in Entwicklung“ oder „gelöscht“. Die „gelöschte“ Klasse ist in Sonderfällen geschrieben
Das Symbol wurde bei einer Veröffentlichung aus der Bibliothek gelöscht. Das Symbol „__ALL__“ für
Die Klasse „gelöscht“ bedeutet, dass die gesamte Bibliothek gelöscht wurde oder aus anderen Gründen instabil ist
benutzen.
Beispiele:
libfoo.so.1|__bar|private
/lib/libxyz.so.1|baz|public
__SKIP__|__fputwc_xpg5
Diese Einstellungen überschreiben alle Klassifizierungen innerhalb der Bibliothek (aus der Bibliothek).
Versionierung, erhältlich unter pvs(1) usw.).
-A Listendatei
Legen Sie die gewünschten ABI-Bibliotheken auf die in aufgeführten Bibliotheken fest Listendatei (full
Pfadnamen, einer pro Zeile). Nur Aufrufe in diese Bibliotheken werden überprüft; alle
Andere Bibliotheksaufrufe werden ignoriert.
-s Datenbankdatei, -S dbdatei
Geben Sie umfangreichere Symboldatenbanken für den statischen Linktest an. dbdatei könnte sein
eine durch Kommas getrennte Liste von Dateien. Wenn es sich bei einer Datei um ein statisches Archiv (lib*.a) handelt, ist dies der Fall
verarbeitet, um die Symbole zu extrahieren. Ansonsten handelt es sich um eine Datenbankdatei bestehend aus
Zeilen der Form symbol|library:module zum Beispiel:
shmat|/usr/lib/libc.a:shmsys.o
shmctl|/usr/lib/libc.a:shmsys.o
shmdt|/usr/lib/libc.a:shmsys.o
shmget|/usr/lib/libc.a:shmsys.o
...
Wenn alle Symbole in einem module.o in der Anwendung definiert sind, erfolgt die statische Verknüpfung von
Dieses Modul (und das entsprechende Bibliotheksarchiv) wird vorausgesetzt. Verwenden -S um anzuzeigen,
dass nur der statische Linktest durchgeführt werden sollte.
Verwenden Sie die -S int um nur die statische Linkprüfung durchzuführen und die interne Datenbank zu verwenden.
Verwenden Sie die -s keine or -S keine um die statische Verknüpfungsprüfung vollständig zu überspringen.
-j njobs
Führen Sie njobs parallel als separate Prozesse ablaufen. Impliziert -k. In erster Linie gedacht für
mehrere CPU-Maschinen wo njobs sollte nahe an der Anzahl der Prozessoren liegen.
Die Ausgabe wird in tmp-Dateien gesammelt und gegen Ende des Laufs auf einmal gedruckt als
Jeder Job wird beendet.
If njobs ist dann „-“, „detect“ oder „n“. njobs wird je nach auf eine Zahl gesetzt
die Anzahl der Prozessoren auf der aktuellen Maschine (falls diese ermittelt werden kann).
OPERANDEN
Folgende Operanden werden unterstützt:
Dateien Eine Liste der zu überprüfenden binären Anwendungsobjekte.
AUSGABE
Es gibt eine Zeile pro Problem (es können mehrere Probleme pro überprüfter Binärdatei vorhanden sein).
sehen wie folgt aus:
Wenn keine Probleme gefunden wurden:
Dateinamen: IN ORDNUNG
Bei Verwendung privater Symbole:
Dateiname: PRIVATGELÄNDE (Bibliothek:private_version) private_sym
Wenn sich die Symbolverwendung weiterentwickelt:
Dateinamen: ENTWICKLUNG (Bibliothek:evolving_vers) evolving_sym
Wenn die Datei statisch in einer Systemarchivbibliothek verknüpft ist:
Dateinamen: STATIC_LINK (Archiv)
Wenn die Überprüfung der Datei übersprungen wurde:
Dateinamen: ÜBERSPRINGEN (Grund)
Unter Verwendung der gelöschten Klasse in der -O Wenn Sie die Dateioption überschreiben, können diese Probleme auftreten
gefunden:
Wenn ein Symbol in einer Version aus der Bibliothek gelöscht wurde:
Dateinamen: DELETED_SYM: Symbol/Bibliothek
(Bibliothek wird „ungebunden“ sein, wenn das Symbol ungebunden war)
Wenn eine gesamte Bibliothek bei einer Version gelöscht wurde oder aus anderen Gründen instabil ist
benutzen:
Dateinamen: UNSTABLE_LIB: Bibliotheksname = Bibliothekspfad
(Bibliothekspfad kann „Datei nicht gefunden“ lauten, wenn die Bibliothek nicht gefunden werden konnte)
Die folgenden Probleme führen zu einem schwerwiegenden Fehler, es sei denn, die -k Option wird verwendet:
Wenn der dynamische Linker nicht aufgelöst werden konnte N Symbole wann ldd -r wurde ausgeführt:
Dateinamen: UNBOUND_SYMBOLS: N
Wenn der dynamische Linker keine dynamischen Bindungen gefunden hat:
Dateinamen: NO_BINDINGS
If ldd -r mit LD_DEBUG=Dateien, Bindungen gescheitert:
Dateinamen: LDD_ERROR
In diesen letzten drei Fällen laufen ldd -r Weitere Informationen dazu finden Sie in der Binärdatei
ging schief (beachten Sie, dass Abicheck läuft ldd -r mit LD_DEBUG=Dateien, Bindungen Satz). Auf einigen
Systeme, mit denen der dynamische Linker keine SUID-Programme verarbeitet LD_DEBUG einstellen (dies ist normalerweise der Fall
Ergebnisse in NO_BINDINGS begann Abicheck Ausgang).
Beachten Sie Folgendes: Wenn Sie abicheck in einer gemeinsam genutzten Bibliothek (z. B. libfoo.so) ausführen
hat nicht wurde mit gebaut -l lib Flags, um seine Bibliotheksabhängigkeiten aufzuzeichnen, dann wird das „unbound
Das Problem mit den Symbolen ist sehr wahrscheinlich. Es gibt nicht viel, was man tun kann, außer die Datei neu zu erstellen
Bibliothek oder überprüfen Sie eine Anwendungsbinärdatei, die die Bibliothek verwendet, und verwenden Sie die -l Option
Abicheck.
EXIT STATUS
Die folgenden Exit-Werte werden zurückgegeben:
0 Keine Fehler und keine Probleme gefunden.
1 Ein schwerwiegender Fehler ist aufgetreten.
2 Es sind keine schwerwiegenden Fehler aufgetreten, bei einigen Binärdateien wurden jedoch Probleme festgestellt.
ANMERKUNG
Es werden nur ELF-Objekte überprüft.
Im -s -S -d und -O dbfiles Das Zeichen „#“ beginnt wie üblich eine Kommentarzeile.
Es sei denn, man verwendet die benutzerdefinierten Übereinstimmungen „::“, die über bereitgestellt werden -p or -e Flaggen, Abicheck kann
Prüfen Sie nur anhand von Systembibliotheken, auf die eine Symbolversionierung angewendet wurde (d. h
die privaten und/oder sich entwickelnden Informationen, die für jedes Symbol in der Bibliothek selbst aufgezeichnet sind).
Weitere Informationen zur Symbolversionierung finden Sie im „Solaris Linker and Libraries Guide“.
Antwortbuch unter der URL http://docs.sun.com/ab2/coll.45.13 und das Commands/Version-Script
Abschnitt der GNU-Linker-Infoseite „ld“.
Bei den standardmäßigen Übereinstimmungsmustern für Symbolversionsnamen wird die Groß-/Kleinschreibung nicht berücksichtigt
Zeichenfolgen „private“ und „evolving“ für den Fall „private“ bzw. „evolving“.
Ungerade Dateinamen, die ein einfaches Anführungszeichen oder einen Zeilenumbruch enthalten, werden übersprungen. solch
Zeichen stören den Aufruf von Befehlen über die Shell.
Um Verzeichnisse zu rekursieren, verwenden Sie gefunden(1) und entweder die Ausgabe in einer Datei zur Verwendung sammeln
-f Option, oder in einer Pipe in via:
finden ... | abicheck -f - ...
Nutzen Sie abicheck online über die Dienste von onworks.net