Warum liefert die ausführbare Dock-Datei im Gegensatz zu anderen OS X-Apps keine nützlichen Zeichenfolgen?

Wenn ich den stringsBefehl für die ausführbare Datei in den meisten OS X-Apps (• .app/Contents/MacOS/•) ausführe, erhalte ich eine Liste mit Routinennamen, möglichen versteckten Einstellungen usw. Wenn ich den Befehl für die ausführbare Dock-Datei ausführe, erhalte ich Datenmüll. Was unterscheidet die ausführbare Dock-Datei von den meisten anderen Mac-Programmen?

Könnte verschlüsselt, komprimiert, entfernt, verschleiert sein.
Dasselbe passiert auch mit den ausführbaren Dateien einiger anderer Anwendungen wie Finder, Safari und Transmit. Ich weiß nicht, warum sie unterschiedlich sind, aber basierend auf dem Kommentar von @Chealion bei 10.6: Keine leicht zu findenden versteckten Einstellungen mehr - Mac OS X-Hinweise, es liegt wahrscheinlich nicht zuletzt an der HFS + -Komprimierung.

Antworten (2)

Dies liegt daran, dass viele OS X-Binärdateien verschlüsselt sind. Sie werden in Echtzeit von „Don't Steal Mac OS X.kext“ in Ihrem /System/Library/Extensions entschlüsselt. Ich weiß nicht, warum Apple das macht. Der Get-Info-String der Datei:

Der Zweck dieser Apple-Software besteht darin, urheberrechtlich geschütztes Material von Apple vor unbefugter Vervielfältigung und Verwendung zu schützen. Sie dürfen diese Datei weder ganz noch teilweise kopieren, modifizieren, zurückentwickeln, öffentlich anzeigen, öffentlich aufführen, unterlizenzieren, übertragen oder weiterverteilen. Wenn Sie eine Kopie dieser Apple-Software erhalten haben und keine gültige Lizenz von Apple haben, um sie zu verwenden, zerstören oder löschen Sie sie bitte sofort von Ihrem Computer.

Es ist sehr üblich, ein Programm zu komprimieren und zu reduzieren, das ein wesentlicher Bestandteil des Systems ist und die ganze Zeit läuft.

Zeichenfolgen werden zur Erleichterung des Debuggings belassen, beanspruchen jedoch zusätzlichen Speicherplatz, den der Computer beim Ausführen nicht benötigt. Es ist immer ein Kompromiss, zu entscheiden, ob Debugging-Informationen aus einer ausführbaren Datei entfernt werden sollen, aber in diesem Fall (oder im Kernel oder anderen Kernfunktionen) kann dies dazu dienen, die Ausführungsgeschwindigkeit zu optimieren, unabhängig davon, ob es das Debuggen oder Poken etwas schwieriger macht oder nicht im Inneren eines Programms.

Wir werden den Grund dafür wahrscheinlich nicht kennen, aber es ist üblich, Apps im Laufe der Zeit zu testen und diejenigen auszuwählen, die die meiste CPU-Zeit verbrauchen, sodass Sie nur den Code optimieren, der dies erfordert, anstatt alles zu optimieren .