Synopsis
atos [-o <binary-image-file> | <dSYM>] [-p <pid> | <partial-executable-name>]
[-arch architecture] [-l <load-address>] [-textExecAddress <address>] [-s <slide>]
[-offset] [-printHeader] [-fullPath] [-dedup] [-i] [-d <delimiter>]
[-f <address-input-file>] [<address> ...]
Description
atos komutu, sayısal adresleri sembolik karşılıklarına dönüştürür. Eğer tam hata ayıklama sembol bilgisi mevcutsa (örneğin, bir .app dosyasının yanında duran bir .app.dSYM dosyasında), atos çıktısı dosya adını ve kaynak satır numarası bilgisini de içerecektir.
Girdi adresleri üç yoldan biriyle verilebilir:
Argüman listesinin sonundaki adres listesi olarak.
Boşluklarla ayrılmış sayısal adresler içeren bir girdi dosyasının yolunu belirtmek için -f
argümanı kullanılarak. Doğrudan hiçbir adres belirtilmemişse, atos etkileşimli moda (interactive mode) geçer ve adresleri standart girdiden (stdin) okur.
Semboller, aşağıdakiler tarafından belirtildiği üzere ya bir ikili görsel (binary image) dosyasında ya da halihazırda yürütülmekte olan bir süreçte bulunur:
-o
-p
Gerekirse birden fazla süreç kimliği veya yolu belirtilebilir ve bu ikisi herhangi bir sırayla karıştırılabilir. Bir Mach-O ikili görsel dosyasıyla çalışırken atos, yalnızca o ikili görsel dosyasında tanımlanan adresleri ve sembolleri, varsayılan konumlarında dikkate alır (tabii -l veya -s seçeneği verilmemişse). Çalışan bir süreçle çalışırken atos, o süreç tarafından yüklenmiş olan tüm ikili görsellerde tanımlanan adresleri ve sembolleri, yüklendikleri konumlarda dikkate alır.
Aşağıdaki ek seçenekler mevcuttur:
-arch architecture Sembollerin aranacağı ikili görsel dosyasının belirli bir mimarisi.
-l
-textExecAddress
arm64(e) cihazlarındaki çekirdek alanı (kernel-space) ikili görselleriyle birlikte yükleme adresi yerine kullanılmalıdır. Bu değerin, başında "0x" öneki olmasa bile her zaman onaltılık (hex) tabanda olduğu varsayılır. Girdi adreslerinin, bu text exec adresine sahip bir ikili görselin içinde olduğu varsayılır. Çekirdek paniği (kernel panic) raporunda text exec adresi "Kernel text exec base" satırında veya kext'ler için "Kernel Extensions in backtrace:" bölümünde bulunabilir.-s
-offset Verilen tüm adresleri ikili dosya içindeki ofsetler (offsets) olarak ele alır. Aynı anda şu seçeneklerden yalnızca biri kullanılabilir: -s, -l, -textExecAddress veya -offset.
-printHeader
Eğer bir süreç belirtilmişse, atos çıktısının ilk satırı "Looking up symbols in process
-fullPath Kaynak dosyalarının tam yolunu yazdırır.
-i: Satır içi (inlined) sembolleri görüntüler.
-d
-dedup: Tekilleştirilmiş sembollerin () tüm varyantlarını yazdırır. Tekilleştirilmiş semboller, özdeş talimatlara sahip işlevleri tek bir sembol altında birleştiren, yani onları tekilleştiren bağlayıcı optimizasyonunun (linker optimization) bir sonucudur. Orijinal işlev varyantları Nlist'ten çıkarılır.
Example
Sketch uygulamasının soyulmuş (stripped), optimize edilmiş bir sürümü, x86_64 konumdan bağımsız yürütülebilir dosya (PIE) olarak /BuildProducts/Release dizinine derlendi. Tam hata ayıklama sembol bilgisi, Sketch.app dosyasının yanında bulunan Sketch.app.dSYM dosyasında mevcuttur. Sketch.app çalıştırıldığında, Sketch ikili dosyası (0x100000000 adresinde derlenmiş olan) 0x10acde000 adresinde yüklendi. 'sample Sketch' komutunu çalıştırmak, sembol bilgisini almak istediğimiz 3 adresi gösterdi -- 0x10acea1d3, 0x10ace4bea ve 0x10ace4b7a.
İlk olarak .dSYM dosyasının .app dosyasının yanında olduğuna dikkat edin:
% ls -1 /BuildProducts/Release/ Sketch.app Sketch.app.dSYM
Şimdi sembolleştirmek için, yükleme adresini belirtmek üzere -o bayrağı ile gerçek Sketch yürütülebilir dosyasının yolunu ( .app sarmalayıcısını değil), -arch x86_64 bayrağını ve -l 0x10acde000 bayrağını belirterek atos aracını çalıştırıyoruz.
% atos -o /BuildProducts/Release/Sketch.app/Contents/MacOS/Sketch -arch x86_64 -l 0x10acde000 0x10acea1d3 0x10ace4bea 0x10ace4b7a -[SKTGraphicView drawRect:] (in Sketch) (SKTGraphicView.m:445) -[SKTGraphic drawHandlesInView:] (in Sketch) (NSGeometry.h:110) -[SKTGraphic drawHandleInView:atPoint:] (in Sketch) (SKTGraphic.m:490)
Aynı amaca dSYM dosyası ile atos çalıştırılarak da ulaşılabilir:
% atos -o /BuildProducts/Release/Sketch.app.dSYM -arch x86_64 -l 0x10acde000 0x10acea1d3 0x10ace4bea 0x10ace4b7a -[SKTGraphicView drawRect:] (in Sketch) (SKTGraphicView.m:445) -[SKTGraphic drawHandlesInView:] (in Sketch) (NSGeometry.h:110) -[SKTGraphic drawHandleInView:atPoint:] (in Sketch) (SKTGraphic.m:490)
FARKLI BİR MAKİNE MİMARİSİ İÇİN SEMBOLLERİ ELDE ETME atos'un çalıştığı sistemden farklı bir makine mimarisindeki adreslerin sembollerini almak mümkündür. Örneğin, Intel tabanlı bir sistemde atos çalıştırırken, bir ARM cihazında çalışan bir sürecin geri izlemesinden (backtrace) gelen bir adresin sembolünü almak istenebilir. Bunu yapmak için, -arch bayrağını kullanarak istenen mimariyi (i386 veya arm gibi) belirtin ve ilgili mimarinin ikili görseline sahip, sembol açısından zengin bir Mach-O ikili görsel dosyasını (Evrensel İkili gibi) parametre olarak geçirin.
macOS 26.4 18 Kasım 2021 macOS 26.4