man/text
man · Metin İşleme

$ symbols

Bölüm 1 · Metin İşleme

bir dosya veya süreç hakkında sembol bilgilerini görüntüler

Ö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şen current değeridir. Hedef dosyada veya süreçte mevcut mimari bulunmuyorsa symbols, kullanılabilir ilk 64 bit mimariyle eşleşen any64bit değerini denemeyi amaçlar. Kullanılabilir 64 bit mimari yoksa kullanılabilir ilk mimariyle eşleşen any değerine döner. Hedefteki tüm mimariler üzerinde yineleme yapmak için all kullanılabilir. Mimari adı, i386, x86_64 veya arm gibi 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, -noSymbols ve -noSources seç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; -noSymbols ve -noSources seçeneklerini de kapsar.
  • -noSymbols: Sembol düzeyindeki bilgileri yazdırmaz. Bu seçenek kaynak düzeyindeki bilgileri de engeller; -noSources seç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 sonra symbols komutuna 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ı NList verilerinden çı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 komutunda SG_PROTECTED_VERSION_1 bayrağı ayarlanmıştır.
  • AOUT: Sembol sahibi bir yürütülebilir dosyadır.
  • DYLIB: Sembol sahibi bir dylib veya 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 bir kexttir.
  • 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çin mmap ile eşlenmiş dosya önbelleği kullanır.
  • MMap64: Sembol sahibi, sembol bilgileri için mmap ile 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ı NList verilerinden gelir.
  • NameDwarf: Sembolün adı DWARF verilerinden gelir.
  • NameDwarfMIPSLinkage: Sembolün adı özelleştirilmiş DWARF verilerindendir.
  • MangledNameNList: Sembolün bozulmuş adı NList verilerindendir.
  • MangledNameDwarf: Sembolün bozulmuş adı DWARF verilerindendir.
  • MangledNameDwarfMIPSLinkage: Sembolün bozulmuş adı özelleştirilmiş DWARF verilerindendir.
  • Merged: Sembolün birden fazla veri kaynağı vardır.
  • NList: Sembol NList verilerinde bulunmuştur.
  • Dwarf: Sembol DWARF verilerinde bulunmuştur.
  • DebugMap: Sembol DebugMap verilerinde 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 bilgisi LINKEDIT segmentinde bulunur. Kesin değildir; uzunluk veya bitiş adresi yerine yalnızca başlangıç adresi içerir. NList verilerinin tüm sembollere referans vermesi gerekmez ve genellikle vermez. Çoğu durumda yalnızca harici sembol bilgileri mevcuttur. Bu bilgiler bile strip(1) ile kaldırılabilir.
  • DEBUG MAP: Sembol bilgisi çok parçalıdır. Orijinal dosyadaki sembol başına referans, genellikle DWARF olan ek hata ayıklama bilgilerini içeren harici bir dosyayı işaret eder.
  • FUNCTION STARTS: Sembol bilgisi hedefin LC_FUNCTION_STARTS yü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_STARTS yü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ğunda DWARF bilgisi diğer kaynaklardan daha güvenilir kabul edilir ve çelişkiler DWARF verileri lehine çözülür.
  • dSYM: DWARF ve NLIST sembol 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