Söz Dizimi
strip [ seçenek ] ad ...
Açıklama
strip, asamblör ve bağlantı düzenleyicinin çıktısına eklenmiş olan sembol tablosunu kaldırır veya değiştirir. Bu, bir program hata ayıklandıktan sonra alandan tasarruf etmek ve dinamik olarak bağlanan sembolleri sınırlandırmak için yararlıdır.
strip artık hiçbir koşulda yeniden konumlandırma girdilerini kaldırmaz. Bunun yerine, ortaya çıkan sembol tablosunu yansıtmak için harici yeniden konumlandırma girdilerini (ve dolaylı sembol tablosu girdilerini) günceller. strip, ortaya çıkan sembol tablosunda bulunmayan ancak harici bir yeniden konumlandırma girdisi veya dolaylı bir sembol tablosu tarafından ihtiyaç duyulan semboller için bir hata mesajı yazdırır. Bağlantı düzenleyici ld(1), yeniden konumlandırma girdilerini kaldırabilen ve bunu yapmanın güvenli olup olmadığını bilen tek programdır.
strip, bir çalıştırilebilir dosya üzerinde hiçbir seçenek olmadan kullanıldığında, o dosyanın dinamik bağlantı düzenleyiciyi kullanıp kullanmadığını kontrol eder. Kullanıyorsa, strip komutunun etkisi -u ve -r seçeneklerini kullanmakla aynıdır. Dosya dinamik bağlantı düzenleyiciyi kullanmıyorsa (örneğin -preload veya -static), herhangi bir seçenek olmadan strip kullanımının etkisi sembol tablosunu tamamen kaldırmaktır. -S, -x ve -X seçenekleri, ld(1) seçenekleriyle aynı etkiye sahiptir. strip(1) seçenekleri, sembol tablosunu tam olarak istenen düzeye kırpmak için birleştirilebilir.
Dinamik bağlantı ile kullanılan dosyaların sembol tablosunu, yalnızca harici arayüzler olması amaçlanan semboller kaydedilecek şekilde kırpmalısınız. Dinamik bağlantı ile kullanılan dosyalar arasında çalıştırilebilir dosyalar, yüklenen nesneler (genellikle paketler - bundles) ve dinamik paylaşılan kütüphaneler yer alır. Dinamik bağlantı işlemi tarafından yalnızca genel semboller kullanılır. Genel olmayan tüm sembolleri kaldırmalısınız.
Bir çalıştırilebilir dosya, bağımlı olduğu tüm dinamik paylaşılan kütüphanelerle birlikte derlendiğinde, genellikle şu şekilde arındırılır: % strip -u -r executable bu işlem, tüm tanımlanmamış sembolleri (genellikle dinamik paylaşılan kütüphanelerde tanımlıdır) ve dinamik kütüphaneler tarafından başvurulan, çalıştırilebilir dosyada tanımlı tüm genel sembolleri (çalıştırılabilir dosya derlendiğinde statik bağlantı düzenleyici tarafından işaretlendiği şekilde) kaydeder. Bu, çalıştırılabilir bir dosyanın kütüphaneleriyle düzgün çalışmasına izin vermeye devam edecek maksimum arındırma seviyesidir.
Ancak çalıştırilebilir dosya nesneler yüklüyorsa, nesnelerin çalıştırılabilir dosyadan başvurduğu genel semboller de kaldırılmamalıdır. Bu durumda, çalıştırılabilir dosyayı bağlarken, nesneler tarafından hangi sembollerin başvurulabileceğini sınırlandırmak için bağlantı düzenleyici ld(1)'in -exported_symbols_list seçeneğini kullanmalısınız. Ardından, yerel ve hata ayıklama sembollerini şu şekilde kaldırmanız yeterlidir:
% strip -x -S executable
Bir çalıştırilebilir dosyaya yüklenecek nesneler için, çalıştırilebilir dosyanın göreceği genel sembolleri sınırlandırmak amacıyla sembol tablosunu kırpmalısınız. Bu işlem şu şekilde yapılabilir: % strip -s interface_symbols -u object bu da nesne dosyasında yalnızca tanımlanmamış sembolleri ve interface_symbols dosyasında listelenen sembolleri bırakır. Bu durumda, strip(1) yeni sembol tablosunu yansıtacak şekilde yeniden konumlandırma girdilerini ve dolaylı sembol tablosunu güncellemiştir.
Dinamik paylaşılan kütüphaneler için maksimum arındırma seviyesi genellikle -x seçeneğidir (genel olmayan tüm sembolleri kaldırmak için).
ÇALIŞMA ZAMANINDA YÜKLENEN KODLARLA KULLANIM İÇİN DOSYALARI ARINDIRMA Çalışma zamanında kod yükleyen programlar için sembol tablosunu kırpmak, çalıştırilebilir dosyanın yükleyeceği nesnelere sağlamak istediği arayüzü kontrol etmenizi sağlar; arayüzünün bir parçası olmayan sembolleri yayınlamak zorunda kalmaz. Örneğin, genel sembollerinin yalnızca bir alt kümesinin kullanılmasına izin vermek isteyen, ancak statik olarak bağlanmış paylaşılan kütüphanenin tüm genel sembollerinin kullanılmasına izin veren bir çalıştırilebilir dosya şu şekilde arındırılır: % strip -s interface_symbols -A executable burada interface_symbols dosyası, çalıştırılabilir dosyadan çalışma zamanında yüklenen kodun erişmesini istediği sembolleri içerir. Başka bir örnek, bir çalıştırilebilir dosyaya yüklenecek birkaç diğer nesneden oluşan bir nesnenin oluşturulup ardından şu şekilde arındırılmasıdır: % ld -o relocatable.o -r a.o b.o c.o % strip -s interface_symbols -u relocatable.o bu da nesne dosyasında yalnızca tanımlanmamış sembolleri ve interface_symbols dosyasında listelenen sembolleri bırakır. Bu durumda strip(1), yeni sembol tablosunu yansıtacak şekilde yeniden konumlandırma girdilerini güncellemiştir.
Seçenekler
İlk seçenek kümesi, elde edilen çıktı dosyasında kaydedilecek sembolleri belirtir.
-u: Tanımlanmamış tüm sembolleri kaydeder. Bu, harici yeniden konumlandırma girdileri tarafından başvurulan sembolleri kaydetmek amacıyla yeniden konumlandırılabilir nesnelerle kullanım için tasarlanmıştır. Ortak sembollere de harici yeniden konumlandırma girdileri tarafından başvurulduğunu ve bu bayrağın o sembolleri kaydetmediğini unutmayın.-r: Dinamik olarak başvurulan tüm sembolleri kaydeder.
-s dosya_adı dosya_adı içinde listelenen genel sembollerin sembol tablosu girdilerini kaydeder. dosya_adı içinde listelenen sembol adları her satırda bir tane olmalıdır. Başındaki ve sonundaki boşluklar sembol adının bir parçası değildir. # ile başlayan satırlar ve yalnızca boşluk içeren satırlar yoksayılır.
-R dosya_adı dosya_adı içinde listelenen genel sembollerin sembol tablosu girdilerini kaldırır. Bu dosya, yukarıdaki -s dosya_adı seçeneğiyle aynı biçime sahiptir. Bu seçenek genellikle bazı sembolleri kaydeden diğer seçeneklerle (-S, -x vb.) birlikte kullanılır.
-i: -s dosya_adı veya -R dosya_adı seçeneklerinde listelenen ancak arındırılacak dosyalarda bulunmayan sembolleri yoksayar (bu normalde bir hatadır).
-d dosya_adı dosya_adı içinde listelenen her bir kaynak dosya adı için hata ayıklama sembol tablosu girdilerini kaydeder. dosya_adı içinde listelenen kaynak dosya adları, her satırın sonundaki yeni satır karakteri dışında dosyada başka hiçbir boşluk olmadan satır başına bir tane olmalıdır. Ve herhangi bir ön dizin olmadan yalnızca kaynak dosyanın temel adı olmalıdır. Bu seçenek yalnızca stab(5) hata ayıklama biçimiyle çalışır, DWARF hata ayıklama biçimi kullanıldığında hiçbir etkisi yoktur.
-A: Değeri sıfır olanlar dışındaki tüm genel mutlak sembolleri kaydeder ve Objective C sınıf sembollerini kaydeder. Bu, çalışma zamanında kod yükleyen ve yüklenen kodun paylaşılan kütüphanelerdeki sembolleri kullanmasını isteyen programların kullanımı içindir (bu yalnızca NEXTSTEP 3.3 ve önceki sürümlerle kullanılır).-n: Tüm N_SECT genel sembollerini kaydeder. Bu, doğru statik bağlantı düzenleme için gerekli olan ancak -s dosya_adı kullanımının çok zahmetli olacağı çalışma zamanı yükleme arayüzleriyle kullanım için gerekli olmayan sembolleri kaldırmak amacıyla çalıştırılabilir programlarla birlikte -A seçeneğiyle kullanılmak üzere tasarlanmıştır (bu yalnızca NEXTSTEP 3.3 ve önceki sürümlerle kullanılır).
Bu seçenekler, elde edilen çıktı dosyasından kaldırılacak sembolleri belirtir.
-S: Hata ayıklama sembol tablosu girdilerini kaldırır (cc(1) ve diğer derleyicilerin -g seçeneği tarafından oluşturulanlar).-X: AdıLile başlayan yerel sembolleri kaldırır.-T: Bu bayrağın amacı, Mach-O sembol tablosundan Swift sembollerini kaldırmaktır; yalnızca sıfır olmayan bir Swift sürümüne sahip bir __objc_imageinfo bölümü bulduğunda adı_$Sveya_$sile başlayan sembolleri kaldırır. Gelecekte, bu bayrağın uygulanması amaca uyacak şekilde değişebilir. -R veya -s dosyaları ile birlikte kullanıldığında, Swift sembolleri dyld tarafından kullanılan genel sembol listelerinden de kaldırılacaktır.-N: Dinamik bağlayıcıyı kullanan ikili dosyalarda, tüm nlist sembollerini ve dize tablosunu kaldırır. STRIP_NLISTS ortam değişkenini ayarlamak da aynı etkiye sahiptir.-x: Tüm yerel sembolleri kaldırır (yalnızca genel sembolleri kaydeder).-c: Bir dinamik kütüphanenin bölüm içeriklerini kaldırarak taslak kütüphane çıktı dosyası oluşturur.
Ve son seçenekler:
Kalan tüm argümanları seçenek olarak değil, dosya adı olarak ele alır.-D: Statik bir kütüphaneyi arındırırken, arşivin SYMDEF dosyasının kullanıcı kimliğini, grup kimliğini, tarihini ve dosya modunu makul varsayılanlara ayarlar. Daha fazla bilgi için libtool(1) belgesindeki -D seçeneğine bakın.
-o çıktı Sonucu çıktı (output) dosyasına yazar.
-v: Nesne dosyalarını işlerken strip(1) tarafından çalıştırılan diğer araçlara iletilen argümanları yazdırır.
-no_uuid Varsa LC_UUID yükleme komutlarını kaldırır.
-no_split_info LC_SEGMENT_SPLIT_INFO yükleme komutunu ve yükünü kaldırır.
-no_atom_info LC_ATOM_INFO yükleme komutunu ve yükünü kaldırır.
-no_code_signature_warning Çıktıda kod imzası geçersiz olacağında uyarı vermez.
-arch mimari_türü Dosya evrensel (universal) bir dosya olduğunda, strip(1)'in üzerinde işlem yapacağı dosyanın mimarisini (mimari_türü) belirtir. (Şu anda bilinen mimari_türleri için arch(3) belgesine bakın.) mimari_türü, varsayılan olarak dosyadaki tüm mimariler üzerinde işlem yapmak için "all" olabilir.
Ayrıca Bakınız
ld(1), libtool(1), cc(1)
Örnekler
Bir taslak kütüphane oluştururken genellikle -c ve -x kullanılır:
strip -x -c libfoo -o libfoo.stripped
Sınırlamalar
Bir Mach-O dosyasının her düzeni bu program tarafından arındırılamaz. Ancak Apple derleyici sistemi tarafından üretilen tüm düzenler arındırılabilir.