PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie gefährlich" ist strip?



qeldroma75
12.04.04, 15:03
Neulich habe ich einen Artikel entdeckt, der als Kurztipp erwähnte, das man mit "strip" eine binary-Datei entscheidend verkleinern kann, da alle "String-Symbole" durch einfache Symbole ersetzt würden. Am Beispiel Kmail hat das glatte 400 kB (!!) Unterschied ausgemacht.

Nun führt mich das natürlich in Versuchung, alle executables und libraries zu "strippen", jedoch stellen sich mir da drei Fragen:

1. Als Optionen kann ich wählen, Wie ich "strippe". Doch habe ich leider keine genaue Ahnung, was welcher Weg für Konsequenzen hat.

-s --strip-all Remove all symbol and relocation information
-g -S -d --strip-debug Remove all debugging symbols & sections
--strip-unneeded Remove all symbols not needed by relocations
-x --discard-all Remove all non-global symbols
-X --discard-locals Remove any compiler-generated symbols
Also ist nun die Frage, was ich von "-s, -g -S -d, --strip-unneeded, -x, -X" tatsächlich anwenden kann, ohne mein System zu beeinträchtigen (könnte mir denken, das es bei statischen Libs Ärger geben könnte)

2. Wie kann ich in einem Script, welches ich dann über die Verzeichnisse laufen lasse, sagen, wie es herausfindet, ob eine Datei binär ist, oder nicht?

3. Welche Compiler(gcc)-Option muß ich setzen, damit das von selbst gleich beim kompilieren gemacht wird?

Jasper
12.04.04, 17:18
1. --strip-debug und --strip-unneeded
2. mit file
3. gar keine, man kann zwar -g weglassen (debugsymbole) aber trotzdem kann man danach mit strip noch nicht benötigte symbole entfernen


-j

derguteweka
12.04.04, 17:20
Moin,

zu 1.) "Aerger" gibts bei dynamischen libraries und Applikationen, denn die muessen Ihre Symboltable behalten, damit sie dann zur Laufzeit gelinkt werden koennen. Diesen Aerger bekommt man, wenn man -s
als Option fuer strip verwendet. -s ist aber fuer was statisch gebautes voellig ok.
Sicherer ist imho --strip-debug fuer alle Sorten libraries und --strip-unneeded fuer applikationen.

zu 2.) Eigentlich "merkt" strip das schon selber. Also einfach alle files durch strip jagen. Oder ein kompliziertes shellscript basteln (und natuerlich hier vorstellen ;-) ), dass mit Hilfe von "file" vorselektiert...

zu 3.) Ich kenn' ausm Kopf keine Option, mit der man sich strip sparen kann, musste mal bei den Linkeroptionen gucken, obs da was gibt, um bestimmte sections beim finalen link rauszuschmeissen. Ansonsten beim compilieren die Option -g vermeiden, die macht naemlich die debugging info - und die ist das, was richtig aufblaeht...

Gruss
WK

derguteweka
12.04.04, 17:24
@Jasper: Na, das nenn' ich aber synchron posten ;-))

hp_tux
12.04.04, 17:34
Hallo,


Wie gefährlich" ist strip?
also, AFAIK kann man wohl im wesentlichen 3 Arten von Dateien unterscheiden:

1.) Dateien, die keine Binaries sind -> denen tut "strip" überhaupt nichts
2.) "normale" Binaries (executables und libs) -> die macht "strip" schön klein, trotzdem funzen sie noch wie vorher (außer beim debuggen)
3.) Module (gibt's beim Kernel und bei XFree86, k.A., ob noch sonstwo...) -> auch die macht "strip" schön klein, aber auch schön kaputt! :ugly: :ugly: :ugly:

Kleiner Tip: Der folgende Befehl verschafft Dir den schnellen Überblick in einem Verzeichnis:

file *|grep "not stripped"

Gruß

hp_tux

qeldroma75
13.04.04, 23:04
Cool!
Gentoo scheint das automatisch zu machen, habe nichts gefunden, was "not stripped" ist!

Danke zusammen.