Özet
symbols [-help] [-w] [-uuid] [-arch mimari_adı] [-saveSignature yol] [-symbolsPackageDir yol] [-lookup (0x1234 | sembol) ...] [-dedup] dosya... pid... süreç-adı... imza... dSYM...
Açıklama
symbols komutu, dosyalardaki ve çalışan süreçlerdeki kütüphane, sembol ve kaynak satırı bilgilerini incelemek için kullanılır.
Çalışan süreçleri incelemek için root ayrıcalıkları gerekebilir.
symbols, Instruments, dtrace ve sample gibi araçların kullanabileceği sembol bilgisinin mevcut olup olmadığını belirlemek için de kullanılabilir.
Genel Seçenekler
-help: Daha kapsamlı bir seçenek listesi yazdırır.-v: Sürüm bilgisini yazdırır.-w: Geniş çıktı yazdırır; terminal genişliğine göre kırpma yapmaz.-uuid: Yalnızca UUID bilgisini yazdırır.-arch mimari_adı: Hedef mimariyi belirtir. Varsayılan değer, mevcut sistem mimarisiyle eşleşencurrentdeğeridir. Hedef dosyada veya süreçte mevcut mimari bulunmuyorsasymbols, kullanılabilir ilk 64 bit mimariyle eşleşenany64bitdeğerini denemeyi amaçlar. Kullanılabilir 64 bit mimari yoksa kullanılabilir ilk mimariyle eşleşenanydeğerine döner. Hedefteki tüm mimariler üzerinde yineleme yapmak içinallkullanılabilir. Mimari adı,i386,x86_64veyaarmgibi yaygın mimari kısaltmalarından biri de olabilir.-cpuType sayı: Hedef mimarinin CPU türünü sayısal değer olarak belirtir.-cpuSubtype sayı: Hedef mimarinin CPU alt türünü sayısal değer olarak belirtir.-noHeaders: Kütüphane düzeyindeki bilgileri yazdırmaz. Bu seçenek daha alt düzeydeki bilgilerin yazdırılmasını da engeller;-noRegions,-noSymbolsve-noSourcesseçeneklerini de kapsar.-noRegions: Segment/bölüm düzeyindeki bilgileri yazdırmaz. Bu seçenek daha alt düzeydeki bilgilerin yazdırılmasını da engeller;-noSymbolsve-noSourcesseçeneklerini de kapsar.-noSymbols: Sembol düzeyindeki bilgileri yazdırmaz. Bu seçenek kaynak düzeyindeki bilgileri de engeller;-noSourcesseçeneğini kapsar.-noSources: Kaynak düzeyindeki bilgileri yazdırmaz.-noDemangling: Sembol adlarının insan tarafından okunabilir biçimini yazdırmaz; bunun yerine bağlayıcının kullandığı adı yazdırır.-printSignature: Her hedef için daha sonrasymbolskomutuna girdi olarak verilebilen bir imza yazdırır. Bu, hedef verilerini daha sonra kullanmak üzere arşivlemenin bir yoludur.-saveSignature yol: Hedef için imzayı belirtilen yola kaydeder.-deepSignature: Tüm imzaların, mevcut tüm bilgilerin eksiksiz kopyalarını içeren derin kopyalar olmasını sağlar.-fullSourcePath: Her kaynak bilgisi için tam kaynak yolunu yazdırır.-printDsymPaths: Sembol bilgileri hazırlanırken kullanılan dSYM dosyasının yolunu, bulunduysa yazdırır.-symbolsPackageDir yol: Sembol paketi için kullanılacak dizini belirtir.-lookup (0x1234 | sembol): Hedeflerde bir veya daha fazla adresi ya da sembolü bulur. Semboller basit kabuk eşleme desenleri içerebilir.-dedup: Tekilleştirilmiş sembol için tüm varyantları yazdırır. Tekilleştirilmiş semboller, özdeş talimatlara sahip işlevleri tek bir sembol altında birleştiren bağlayıcı optimizasyonunun sonucudur. Orijinal işlev varyantlarıNListverilerinden çıkarılır.
Çıktı
symbols çıktısı genel olarak şu biçimdedir:
hedef [mimari_adı, geçen-süre]:
UUID sembol-sahibi-yolu [BAYRAKLAR]
adres (boyut) bölge-adı
adres (boyut) sembol-adı [BAYRAKLAR]
adres (boyut) kaynakdosyası : satır #
Sembol Sahibi Bayrakları
PROT: Bir yükleme komutundaSG_PROTECTED_VERSION_1bayrağı ayarlanmıştır.AOUT: Sembol sahibi bir yürütülebilir dosyadır.DYLIB: Sembol sahibi birdylibveya framework'tür.DYLIB-STUB: Sembol sahibi yalnızca bağlayıcı tarafından kullanılır.DYLD: Sembol sahibi çalışma zamanı dinamik bağlayıcısıdır.BUNDLE: Sembol sahibi yüklenebilir bir bundle'dır.OBJECT: Sembol sahibi bağlanmamış bir nesne dosyasıdır.KEXT-BUNDLE: Sembol sahibi birkexttir.dSYM_v#: Sembol sahibi#sürümüne sahip bir dSYM'dir.DYLDSHAREDCACHE: Sembol sahibi dyld paylaşılan önbelleğinde bulunmuştur.ObjC-RR: Sembol sahibi manuel retain-release yöntemini destekler.ObjC-GC: Sembol sahibi eski çöp toplama yöntemini destekler.SLID: Sembol sahibi temel adresinden yeniden konumlandırılmıştır.PIE: Sembol sahibi konumdan bağımsız olarak derlenmiştir.RESTRICTED: Sembol sahibinde kısıtlanmış bir segment veya bölüm vardır.STATIC-LIB: Sembol sahibi statik kütüphaneden (.a) gelmektedir.FaultedFromDisk: Sembol sahibine ait veriler diskte bulunmuştur.FaultedFromTask: Sembol sahibine ait veriler çalışan bir görevden alınmıştır.FaultedFromSelfDyldSharedCache: Sembol sahibine ait veriler mevcut sürecin dyld paylaşılan önbelleğinde bulunmuştur.FilesetEntry: Sembol sahibi bir fileset çekirdek koleksiyonunun üyesidir.Found-dSYM: Sembol sahibi için bir dSYM bulunmuştur.Found-Binary-via-dSYM-colocation: Sembol sahibinin ikili dosyası, dSYM aranıp dSYM'nin yanına bakılarak bulunmuştur.Found-Binary-via-dSYM-plist: Sembol sahibinin ikili dosyası, dSYM aranıp plist dosyası okunarak bulunmuştur.MMap32: Sembol sahibi, sembol bilgileri içinmmapile eşlenmiş dosya önbelleği kullanır.MMap64: Sembol sahibi, sembol bilgileri içinmmapile eşlenmiş dosya önbelleği kullanır.Private: Sembol sahibi önbelleğe alınamaz.Empty: Sembol sahibi için veri bulunamamıştır.
Sembol Bayrakları
FUNC: Sembol yürütülebilir kod içerir.DYLD-STUB: Sembol, dinamik bağlayıcı tarafından kullanılan bir stub'dır.OBJC: Sembol bir Objective-C metodudur.THUMB: Sembol thumb komut kodlamasını kullanır.OMIT-FP: Sembol bir frame pointer oluşturmaz.EXT: Sembol dış görünürlüğe sahiptir.PEXT: Sembol özel dış görünürlüğe sahiptir.LENGTH: Sembolün uzunluğu tahmin edilmemiştir; bilinmektedir.NameNList: Sembolün adıNListverilerinden gelir.NameDwarf: Sembolün adıDWARFverilerinden gelir.NameDwarfMIPSLinkage: Sembolün adı özelleştirilmişDWARFverilerindendir.MangledNameNList: Sembolün bozulmuş adıNListverilerindendir.MangledNameDwarf: Sembolün bozulmuş adıDWARFverilerindendir.MangledNameDwarfMIPSLinkage: Sembolün bozulmuş adı özelleştirilmişDWARFverilerindendir.Merged: Sembolün birden fazla veri kaynağı vardır.NList: SembolNListverilerinde bulunmuştur.Dwarf: SembolDWARFverilerinde bulunmuştur.DebugMap: SembolDebugMapverilerinde bulunmuştur.FunctionStarts: Sembol function starts verilerinde bulunmuştur.DEDUP: Sembol, kod tekilleştirme bağlayıcı optimizasyonunun sonucudur.
Sembol Bilgisi Kaynakları
symbols, birden fazla sembol bilgisi kaynağı kullanır. Tüm kaynaklar sorgulanır ve elde edilen veriler birleştirilir.
NLIST: Sembol bilgisiLINKEDITsegmentinde bulunur. Kesin değildir; uzunluk veya bitiş adresi yerine yalnızca başlangıç adresi içerir.NListverilerinin tüm sembollere referans vermesi gerekmez ve genellikle vermez. Çoğu durumda yalnızca harici sembol bilgileri mevcuttur. Bu bilgiler bilestrip(1)ile kaldırılabilir.DEBUG MAP: Sembol bilgisi çok parçalıdır. Orijinal dosyadaki sembol başına referans, genellikleDWARFolan ek hata ayıklama bilgilerini içeren harici bir dosyayı işaret eder.FUNCTION STARTS: Sembol bilgisi hedefinLC_FUNCTION_STARTSyükleme komutunda bulunur. Kesin değildir; uzunluk veya bitiş adresi yerine yalnızca başlangıç adresi içerir. Ad veya bozulmuş ad bilgisi içermez.LC_FUNCTION_STARTSyükleme komutu isteğe bağlıdır ve tüm hedeflerde bulunmayabilir.DWARF: Gerçek hata ayıklama bilgisidir. Genellikle kesindir, ancak bunun kesin olması zorunlu değildir. Mevcut olduğundaDWARFbilgisi diğer kaynaklardan daha güvenilir kabul edilir ve çelişkilerDWARFverileri lehine çözülür.dSYM:DWARFveNLISTsembol bilgilerini içeren harici dosyadır.
Çekirdek Sembolleri
Çekirdek sembolleri, özel -1 PID değeri kullanılarak elde edilebilir. Buna yüklenen kextler de dahildir.
İmzalar
İmza, sembol bilgilerini daha sonraki bir tarihte yeniden kurmak için gereken bilgidir. Örneğin bir imza, kütüphanelerin listesini ve her kütüphane için bir UUID ile segmentlerin yüklendiği adresleri içerir.
Ayrıca symbols aracının bulabildiği her bilgi parçası hakkında eksiksiz bilgi içeren derin imza da istenebilir. Bu, daha sonraki teşhis ve incelemeler için yararlı olabilir.
Sembol Paketi
Sembol paketi, bir veya daha fazla ikili imaj için derin imzalar içeren bir dizindir.
-symbolsPackageDir ile bir dizin belirtildiğinde symbols, okuduğu her ikili imaj dilimi için derin bir imza dosyası yazar. Bu dosyalar, uygulama yığın izlemelerini (crash raporları tarafından üretilenler gibi) işlev adları ve dosya adları/satır numaralarıyla sembolize etmek için yeterli bilgi içerir.
Örnekler
AppKit'in varsayılan mimarisindeki tüm sembol ve kaynak satırı bilgilerini yazdırır:
symbols /System/Library/Frameworks/AppKit.framework/AppKit
AppKit'teki her mimari için özet UUID bilgilerini yazdırır:
symbols -uuid /System/Library/Frameworks/AppKit.framework/AppKit
AppKit'in i386 mimarisindeki tüm sembol ve kaynak satırı bilgilerini yazdırır:
symbols -arch i386 /System/Library/Frameworks/AppKit.framework/AppKit
7085 numaralı PID'deki tüm sembol ve kaynak satırı bilgilerini yazdırır:
symbols 7085
7085 numaralı PID'de 0x7fff5bf0008 adresindeki sembol ve kaynak satırı bilgilerini yazdırır:
symbols 7085 -lookup 0x7fff5bf0008
Safari adlı süreci bulmaya çalışır ve bunun sembol ile kaynak satırı bilgilerini yazdırır:
symbols Safari
Safari adlı süreci bulmaya çalışır ve bulunabilen tüm bilgilerin kopyasını /tmp/Safari.signature dosyasına kaydeder:
symbols -deepSignature -saveSignature /tmp/Safari.signature Safari
/tmp/Safari.signature dosyasındaki önbelleğe alınmış bilgileri kullanarak *alloc* deseniyle eşleşen her metodu veya işlevi bulur:
symbols /tmp/Safari.signature -lookup "*alloc*"
Çekirdek sembolleri hakkındaki mevcut tüm bilgileri geniş biçimde yazdırır:
symbols -w -1