← man/dev_and_programming
atos — man atos — 80×24
ugur@toprak:~/man/dev_and_programming$man atos
Bölüm 1 Geliştirme & Programlama

atos

sayısal adresleri ikili görsellerin (binary images) veya süreçlerin sembollerine dönüştürür

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:

  1. Argüman listesinin sonundaki adres listesi olarak.

  2. Boşluklarla ayrılmış sayısal adresler içeren bir girdi dosyasının yolunu belirtmek için -f argümanı kullanılarak.

  3. 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 | Sembollerin aranacağı bir ikili görsel dosyasının veya dSYM dosyasının yolu.

-p | Sembollerin aranacağı ve halihazırda yürütülmekte olan bir sürecin süreç kimliği (PID) veya kısmi adı.

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 İkili görselin yükleme adresi (load address). Bu değerin, başında "0x" öneki olmasa bile her zaman onaltılık (hex) tabanda olduğu varsayılır. Girdi adreslerinin, bu yükleme adresine sahip bir ikili görselin içinde olduğu varsayılır. İkili görseller için yükleme adresleri crash, sample, leaks ve malloc_history raporlarının altındaki Binary Images: bölümünde bulunabilir.

-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 İkili görselin kaydırma (slide) değeri -- bu, bir ikili görselin yükleme adresi ile ikili görselin derlendiği adres arasındaki farktır. Bu kaydırma değeri girdi adreslerinden çıkarılır. Yükleme adresini doğrudan -l argümanı ile belirtmek, bir kaydırma değerini manuel olarak hesaplamaktan genellikle daha kolaydır.

-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 named: " şeklinde bir başlık olmalıdır. Bu seçenek, öncelikle atos bir stackshot(1) çalışmasının parçası olarak çağrıldığında süreç kimliğinin ve adının doğrulanması için kullanılır.

-fullPath Kaynak dosyalarının tam yolunu yazdırır.

  • -i: Satır içi (inlined) sembolleri görüntüler.

-d Satır içi çerçeveler (inline frames) çıktı olarak verilirken kullanılacak sınırlayıcı (delimiter). Varsayılan değer yeni satırdır.

  • -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