iphone für - Wie ermittle ich die Zielarchitektur der statischen Bibliothek(.a)unter Mac OS X?




länge meta (5)

Ich möchte prüfen, ob eine bestimmte statische iPhone-Bibliothek für ARM oder Intel gebaut wurde.

Es ist mehr Neugier als alles andere. Gibt es eine Art Mac OS X oder BSD-spezifisches Tool, um dies zu tun? Dieser post gibt ein Beispiel in Linux.


Answers

Eine andere Möglichkeit ist lipo ; seine Ausgabe ist kurz und besser lesbar als otool .

Ein Beispiel:

% lipo -info /usr/lib/libiodbc.a 
Architectures in the fat file: /usr/lib/libiodbc.a are: x86_64 i386 ppc
% lipo -info libnonfatarchive.a
input file libnonfatarchive.a is not a fat file
Non-fat file: libnonfatarchive.a is architecture: i386
%

file wird Ihnen wahrscheinlich sagen. otool sollte es sicherlich können. Aber ich würde zuerst file versuchen, z

logan:/Users/logan% file d2
d2: Mach-O executable ppc

Beispiel mit Archiv:

logan:/Users/logan% file /usr/lib/libMallocDebug.a
/usr/lib/libMallocDebug.a: Mach-O universal binary with 2 architectures
/usr/lib/libMallocDebug.a (for architecture i386):      current ar archive random library
/usr/lib/libMallocDebug.a (for architecture ppc):       current ar archive

Dieses Bash-Skript wird Ihnen helfen, programmatisch eine Liste von Architekturen in eine Variable zu bekommen.

list_archs.sh:

#! /bin/bash
lipo -info $1 | sed -En -e 's/^(Non-|Architectures in the )fat file: .+( is architecture| are): (.*)$/\3/p'

Verwendungsbeispiel:

./list_archs.sh /usr/lib/libc.dylib
x86_64 i386

Als Alternative habe ich gefunden, dass objdump gut funktionieren kann. In meiner Umgebung beispielsweise baue ich Bibliotheksarchive mit vxWorks und muss diese in andere Projekte einbinden. Um zu testen, ob das Archiv die richtige Architektur ist, könnte ich Folgendes tun (Bash-Syntax):

if [ "$(objdumpsparc -a ${ARCHIVE_FILE} 2>&1 | ggrep -cvP 'elf32-sparc-vxworks')" -ne "0" ]; then
  echo "Cannot build with ${ARCHIVE_FILE}, it contains one or more non-sparc components"
fi;

Dieses Beispiel ist nicht genau richtig, weil einige Zeilen erscheinen, die nicht elf32-sparc-vxworks sagen, aber es ist einfach genug, dies anzupassen.

Ein schöner Vorteil davon ist, dass objdump oder eine ähnlich benannte Variante auf den meisten * nix-Betriebssystemen installiert ist, während Tools, die in anderen Antworten vorgeschlagen werden, nicht sind.

Bearbeiten Es ist mir gerade eingefallen, dass das OP auf OSX gefragt hat. Entschuldigen Sie.


Ich habe es noch nicht ausprobiert, aber Elcomsoft hat ein Produkt veröffentlicht, von dem behauptet wird, dass es in der Lage ist, Backups für forensische Zwecke zu entschlüsseln. Vielleicht nicht so cool wie selbst eine Lösung zu entwickeln, aber es könnte schneller sein.

http://www.elcomsoft.com/eppb.html





iphone macos linker bsd