Dit is de opdracht abicheck die kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator
PROGRAMMA:
NAAM
abicheck - controleer binaire bestanden van applicaties op oproepen naar privé- of evoluerende symbolen in
bibliotheken en voor statische koppeling van sommige systeembibliotheken.
KORTE INHOUD
abicheck [-h] [-k] [-a] [-I] [-v] [-f lijstbestand] [-of uitbestand] [-P patroon] [-e patroon] [-J
njobs] [-l bibliotheek] [-L ldpad] [(-s|-S) dbbestand] [(-d|-D) dbbestand] [-O dbbestand] [-EEN
lijstbestand] bestanden
PRODUCTBESCHRIJVING
abicheck wordt uitgevoerd op binaire bestanden van applicaties en geeft waarschuwingen wanneer een van de volgende situaties zich voordoet
Er worden drie omstandigheden gedetecteerd:
· Privé symbool gebruik. Privésymbolen zijn functies of gegevensvariabelen in een bibliotheek
pakket die intern zijn voor dat pakket. Ze worden gebruikt door de bibliotheken in het pakket
voor interne communicatie en maken geen deel uit van de API/ABI van applicatieontwikkelaars
zou gebruiken.
· Evolueert symbool gebruik. Evoluerende symbolen zijn functies of gegevensvariabelen in een bibliotheek
pakket dat bedoeld is voor gebruik door ontwikkelaars, maar gemarkeerd is als "evoluerend" of
"onstabiel" in de zin dat ze bij een latere release incompatibel kunnen worden of verdwijnen
van het bibliotheekpakket.
· Statisch koppelen. Statische koppeling van systeembibliotheken (bijvoorbeeld libc.a) in een
applicatie is over het algemeen geen goed idee, omdat de systeembibliotheekcode waarin deze "vergrendelt" zich bevindt
het binaire bestand van de applicatie kan incompatibel worden met latere releases van het systeem. abicheck
probeert statische koppelingen van enkele systeembibliotheken te detecteren.
Het standaardgedrag is dat voor elk aangevinkt binair object directe oproepen daarvan worden onderzocht
alleen binair object. De -l optie staat de bibliotheken toe die het binaire object binnenbrengt
hun oproepen werden ook gecontroleerd.
OPTIES
De volgende opties worden ondersteund:
-k Blijf binaire bestanden controleren, zelfs als er ernstige fouten zijn (dynamische linkerrapporten).
onopgeloste symbolen, ldd(1) storingen, geen symbolen gedetecteerd).
-h Print het lange hulpformulier uit.
-v Uitgebreid. Print aanvullende informatie uit.
-f lijstbestand
De lijstbestand is een bestand met een lijst met binaire objecten die moeten worden gecontroleerd, één per regel.
Deze lijst wordt toegevoegd aan alle bestanden die als argumenten op de opdrachtregel worden aangeboden. Als
lijstbestand is "-", dan wordt stdin gebruikt.
-o uitbestand
Schrijf uitvoer naar uitbestand in plaats van stout.
-p patroon
Wijzig het versienaampatroon dat overeenkomt met het labelen van privéversiesets. Standaard is
/privaat/ met behulp van een hoofdletterongevoelige overeenkomst.
Als een onderdeel van de regex patroon bevat twee dubbele punten op een rij: patt1::patt2,
Vervolgens wordt matching op symboolniveau geactiveerd door te controleren of versie::symbool or
bibliotheek::symbool lucifers patroon (waarbij de symboolnaam, versie (indien aanwezig) en
bibliotheekbasisnaam worden vervangen symbool, versie en bibliotheek). Bijvoorbeeld,
-p 'FOO_VERS.*::_foopriv'
or
-p 'libfoo.so.*::_foopriv'
-e patroon
Hetzelfde als -p maar voor "evoluerende" interfaces.
-L ldpad
Kies het LD_LIBRARY_PATH omgevingsvariabele to ldpad voordat u dynamiek aanroept
koppelaar. Gebruik -L "" om uit te schakelen LD_LIBRARY_PATH.
Als een van de componenten van ldpad is de string "find", dan alle gedeelde bibliotheken
in bestanden worden gevonden en hun paden worden ingevoegd in de "vind" -locatie. Let daar op
de volgorde zal willekeurig zijn.
-l bibliotheek
Voeg de basisnaam of de volledige padnaam van de gedeelde bibliotheek toe bibliotheek naar de lijst van
objecten die moeten worden gecontroleerd voor het maken van privégesprekken. Deze optie kan vaker voorkomen
eenmaal op de opdrachtregel en is additief. Standaard worden alleen directe oproepen van a
binair naar de systeembibliotheken worden gecontroleerd. De -l schakelaar maakt controle mogelijk
indirecte oproepen, bijvoorbeeld: app -> supportlib -> systemlib.
-a Loop door alle binaire bestanden voordat u de lijst met alle gedeelde bestanden controleert en verzamelt
voorwerpen. Neem de basisnaam van elk gevonden gedeeld object en doe alsof het zo is
gespecificeerd met de -l optie optie en voer vervolgens de abicheck-controles uit. Op deze manier,
aanroepen van alle "applicatie-interne" objecten worden gecontroleerd in plaats van alleen de
directe oproepen. (Handig als gedeelde objecten geen afhankelijkheden hebben
opgenomen.)
-I Negeer gedeelde bibliotheken bij het controleren, controleer alleen uitvoerbare bestanden. Compatibel met -een,
Er wordt eerst gezocht naar bibliotheken, maar daarna niet gecontroleerd.
-d dbbestand, -D db-bestand
Specificeer een fallback-symbooldatabase met platte bestanden voor de dynamische (openbare versus privé)
test. Deze classificaties worden gebruikt als de bibliotheek geen versiebeheer heeft (bijv
classificatie bestaat niet in de bibliotheek zelf). Gebruik -D om dat alleen maar aan te geven
informatie van db-bestand zou gebruikt moeten worden. Lijnen binnen db-bestand kan een van deze zijn
vormen:
bibliotheek|symbool
bibliotheek|klasse|symbool
bibliotheek|BESTAND=pad
bibliotheek moet het volledige pad naar de op te geven bibliotheek zijn (het kan geen
basisnaam).
Het eerste formulier markeert symbool als privé.
Het tweede formulier markeert symbool met klasse WAAR klasse kan openbaar, privé of
evolueert.
Het derde formulier geeft het bestand aan pad moet op aanvraag worden geopend wanneer bibliotheek is
voor het eerst tegengekomen. Bestand pad bevat regels van de eerste twee vormen, behalve de
bibliotheek veld. De derde vorm is een versnelling om te voorkomen dat veel classificaties worden verwerkt
regels voor bibliotheken die u tijdens de run nog nooit bent tegengekomen.
-O db-bestand
Geef een overschrijvingsbestand op om de symboolclassificatie voor de dynamiek te wijzigen
(openbare versus privé) test. Het formaat voor het overschrijvingsbestand is als volgt:
bibliotheek|symbool|klasse
De bibliotheek kan het volledige pad of de basisnaam zijn. Als bibliotheek "__SKIP__" het symbool is
wordt genegeerd voor elke bibliotheek waarin deze wordt aangetroffen. De klasse kan "openbaar" zijn,
"privé", "evoluerend" of "verwijderd". De klasse "verwijderd" heeft een speciaal geval, middelen
het symbool is bij een bepaalde release uit de bibliotheek verwijderd. Het symbool "__ALL__" voor
de klasse "verwijderd" betekent dat de hele bibliotheek is verwijderd of anderszins instabiel is
gebruiken.
Voorbeelden:
libfoo.so.1|__bar|privé
/lib/libxyz.so.1|baz|openbaar
__OVERSLAAN__|__fputwc_xpg5
Deze instellingen overschrijven elke classificatie binnen de bibliotheek (van bibliotheek
versiebeheer, verkrijgbaar bij pv(1), enz.).
-A lijstbestand
Stel de ABI-bibliotheken van belang in op de bibliotheken die worden vermeld in lijstbestand (full
padnamen, één per regel). Alleen oproepen naar deze bibliotheken worden gecontroleerd; alle
andere bibliotheekoproepen worden genegeerd.
-s dbbestand, -S db-bestand
Specificeer uitgebreidere symbooldatabases voor de statische koppelingstest. db-bestand kan zijn
een door komma's gescheiden lijst met bestanden. Als een bestand een statisch archief is (lib*.a), is dat ook het geval
verwerkt om de symbolen te extraheren. Anders is het een databasebestand bestaande uit
regels van het formulier symbol|library:module bijvoorbeeld:
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
...
Wanneer alle symbolen in een module.o in de applicatie zijn gedefinieerd, wordt er statisch gekoppeld
er wordt uitgegaan van die module (en het bijbehorende bibliotheekarchief). Gebruik -S aangeven
dat alleen de statische verbindingstest moet worden uitgevoerd.
Te gebruiken -S int om alleen de statische linkcontrole uit te voeren en de interne database te gebruiken.
Te gebruiken -s geen or -S geen om de statische koppelingscontrole volledig over te slaan.
-j banen
lopen banen parallel als afzonderlijke processen. Impliceert -k. In de eerste plaats bedoeld voor
meerdere CPU-machines waar banen moet dicht bij het aantal processors liggen.
De uitvoer wordt verzameld in tmp-bestanden en in één keer afgedrukt tegen het einde van de run as
elke klus is klaar.
If banen is dan "-", "detecteren" of "n". banen wordt ingesteld op een getal afhankelijk van
het aantal processors op de huidige machine (als dat kan worden bepaald).
OPERANDEN
De volgende operanden worden ondersteund:
bestanden Een lijst met binaire applicatieobjecten die moeten worden gecontroleerd.
OUTPUT
Er is één regel per probleem (er kunnen meerdere problemen per gecontroleerd binair bestand zijn).
ziet er als volgt uit:
Als er geen problemen zijn gevonden:
bestandsnaam: OK
Bij gebruik van privé-symbolen:
bestandsnaam: PRIVAAT (bibliotheek:privé_versie) privé_sym
Als het symboolgebruik evolueert:
bestandsnaam: EVOLUEREND (bibliotheek:evoluerende_vers) evoluerende_sym
Als het bestand statisch is gekoppeld in een systeemarchiefbibliotheek:
bestandsnaam: STATIC_LINK (archief)
Als de controle van het bestand werd overgeslagen:
bestandsnaam: OVERSLAAN (reden)
Onder gebruik van de verwijderde klasse in de -O overschrijf de bestandsoptie, deze problemen kunnen voorkomen
gevonden:
Als een symbool bij een bepaalde release uit de bibliotheek is verwijderd:
bestandsnaam: VERWIJDERD_SYM: symbool/bibliotheek
(bibliotheek zal "ongebonden" zijn als het symbool ongebonden was)
Als een hele bibliotheek bij een bepaalde release is verwijderd of anderszins instabiel is
gebruiken:
bestandsnaam: UNSTABLE_LIB: bibliotheek-soname = bibliotheek-pad
(bibliotheek-pad kan "bestand niet gevonden" zijn als de bibliotheek niet kon worden gevonden)
De volgende problemen zullen een fatale fout veroorzaken, tenzij de -k optie wordt gebruikt:
Als de dynamische linker niet kon oplossen N symbolen wanneer ldd -r werd uitgevoerd:
bestandsnaam: UNBOUND_SYMBOLS: N
Als de dynamische linker geen dynamische bindingen heeft gevonden:
bestandsnaam: GEEN_BINDINGEN
If ldd -r met LD_DEBUG=bestanden,bindingen mislukt:
bestandsnaam: LDD_ERROR
In deze laatste gevallen lopen drie gevallen ldd -r op het binaire bestand voor meer informatie over wat
ging fout (let op abicheck loopt ldd -r met LD_DEBUG=bestanden,bindingen set). Op sommige
systemen waarmee de dynamische linker geen SUID-programma's verwerkt LD_DEBUG instellen (dit is meestal
resultaten in GEEN_BINDINGEN in de abicheck uitgang).
Houd er rekening mee dat als u abicheck op een gedeelde bibliotheek (bijvoorbeeld libfoo.so) gebruikt, dat
heeft niet mee gebouwd -l lib vlaggen om de bibliotheekafhankelijkheden vast te leggen, en vervolgens de "unbound
symbolen"-probleem is zeer waarschijnlijk. Er is niet veel dat gedaan kan worden behalve het opnieuw opbouwen van het
bibliotheek of het controleren van een binair bestand dat de bibliotheek gebruikt en de -l optie van
abicheck.
EXIT STATUS
De volgende exit-waarden worden geretourneerd:
0 Geen fouten en geen problemen gevonden.
1 Er is een fatale fout opgetreden.
2 Er hebben zich geen fatale fouten voorgedaan, maar bij sommige binaire bestanden zijn wel problemen gedetecteerd.
OPMERKINGEN
Alleen ELF-objecten worden gecontroleerd.
In het -s -S -d en -O dbfiles begint het teken '#' op de gebruikelijke manier een commentaarregel.
Tenzij men de "::" aangepaste overeenkomsten gebruikt die worden geleverd via de -p or -e vlaggen, abicheck kan
controleer alleen systeembibliotheken waarop versiebeheer van symbolen is toegepast (bijv
de privé- en/of evoluerende informatie die voor elk symbool in de bibliotheek zelf is vastgelegd).
Voor meer informatie over symboolversiebeheer, zie de "Solaris Linker and Libraries Guide"
antwoordenboek op de URL http://docs.sun.com/ab2/coll.45.13 en het Commando/Versie-Script
sectie van de GNU linker "ld" infopagina.
De standaardpatronen voor de naam van de symboolversie zijn hoofdletterongevoelig voor de
tekenreeksen "privé" en "evoluerend" voor respectievelijk de privé- en evoluerende gevallen.
Oneven bestandsnamen die een enkel aanhalingsteken of een nieuwe regel bevatten, worden overgeslagen; zo een
karakters interfereren met het aanroepen van opdrachten via de shell.
Gebruik om mappen te recurseren vinden(1) en verzamel de uitvoer naar een bestand voor gebruik
the -f optie, of in een leiding via:
vind ... | abicheck -f - ...
Gebruik abicheck online met de diensten van onworks.net