Warum entfernt `strip` keine Abschnittsüberschriften aus ausführbaren ELF-Dateien?

9

Eine minimale ausführbare ELF-Datei erfordert nur den ELF-Header und mindestens einen Programm-Header, um funktionsfähig zu sein. Wenn ich jedoch strip auf einer kurzen ausführbaren Datei ausführe, wird entschieden, die Abschnittsüberschriften-Tabelle oder den Abschnitt "Abschnittszeichenfolgen" nicht wegzuwerfen und sie beizubehalten, obwohl sie (soweit ich weiß) keinen Zweck für die Ausführung des Programms haben.

Gibt es einen Grund, warum diese nicht durch Streifen entfernt werden? Gibt es ein anderes Dienstprogramm, das alles entfernt, was für die Ausführung der ausführbaren Datei nicht erforderlich ist? Ich habe versucht, die ausführbare Code-Golf-Datei, die ich erstellt habe, manuell zu bearbeiten, um die Abschnittsüberschriften zu entfernen, und sie scheint gut zu funktionieren und viel kleiner zu sein.

Geheimnis
quelle
Es wird wahrscheinlich nicht entfernt, weil es einige Programme / Laufzeiten unterbrechen kann
Katze

Antworten:

3

Die Dokumentation für GNU binutilsstrip anspielt auf den Grund, ist aber nicht explizit in der Beschreibung zu erwähnen , --only-keep-debugdass

Hinweis - Die Abschnittsüberschriften der abisolierten Abschnitte bleiben einschließlich ihrer Größe erhalten, der Inhalt des Abschnitts wird jedoch verworfen. Die Abschnittsüberschriften bleiben erhalten, sodass andere Tools die Debuginfo-Datei mit der tatsächlichen ausführbaren Datei abgleichen können, selbst wenn diese ausführbare Datei in einen anderen Adressraum verschoben wurde.

Das heißt, sofern nicht ausdrücklich über die -ROption stripdazu aufgefordert , werden Abschnittsüberschriften beibehalten, um anderen Programmen (einschließlich gdb) bei ihrer Arbeit zu helfen .

Die Seite Richtige Verwendung des Befehls strip (Teil von Reverse Engineering unter Verwendung des Linux-Betriebssystems ) enthält Hinweise

Das Ausführen des stripBefehls auf einer ausführbaren Datei ist die häufigste Programmschutzmethode. In der Standardoperation stripentfernt der Befehl die Symboltabelle und alle Debugging-Informationen aus einer ausführbaren Datei. So wird es normalerweise verwendet. Es gibt jedoch noch nützliche Informationen, die nicht entfernt werden.

und zählt einige nützliche Dinge auf, die möglicherweise zurückbleiben - für die Analyse einer "gestrippten" ausführbaren Datei.

In Learning Linux Binary Analysis wird diese wiederholte, kommentiert , dass fehlt Abschnitt Header normalerweise nur dann , wenn jemand absichtlich sie entfernt, und das ohne Abschnittsüberschriften, gdbund objdumpsind fast nutzlos.

Thomas Dickey
quelle