Nesne dosyası - Object file

Bir nesne dosyası içeren bir bilgisayar dosyasıdır nesne kodu, yani, makine kodu bir çıktı montajcı veya derleyici. Nesne kodu genellikle yeniden yerleştirilebilir ve genellikle doğrudan değil çalıştırılabilir. Nesne dosyaları için çeşitli biçimler vardır ve aynı makine kodu farklı nesne dosyası biçimlerinde paketlenebilir. Bir nesne dosyası aynı zamanda bir paylaşılan kitaplık.

Nesne kodunun kendisine ek olarak, nesne dosyaları şunları içerebilir: meta veriler aşağıdakiler dahil olmak üzere bağlantı veya hata ayıklama için kullanılır: farklı modüller arasındaki sembolik çapraz referansları çözmek için bilgiler, yer değiştirme bilgi, yığın çözme bilgi, yorumlar, program semboller, hata ayıklama veya profil oluşturma bilgi.

"Nesne programı" terimi en az 1950'lerden kalmadır:

Programcı tarafından yazılmış bir kaynak programı cebirsel gösterime benzer bir dile çevirerek makine tarafından üretilen makine dili programı için otomatik programlamadaki bir terim.[1]

Bir bilgisayar programcısı, bir derleyici. Örneğin, altında Linux GNU Derleyici Koleksiyonu derleyici .o uzantılı dosyalar oluşturur. Bir bilgisayarda .obj uzantısına sahiptirler. Daha sonra, nesne kodunu tek bir yürütülebilir programda birleştirmek veya gerektiğinde önceden derlenmiş sistem kitaplıklarını çeken kitaplık oluşturmak için bir bağlayıcı kullanılır. Buna karşılık, komut dosyaları (Python veya JavaScript) yorumlanır ve Java (programlama dili) programlar bayt kodu sınıfı dosyalarına derlenir.

Nesne dosyası formatları

Birçok farklı nesne dosyası biçimi vardır; başlangıçta her bilgisayar türünün kendine özgü bir biçimi vardı, ancak Unix ve diğeri taşınabilir işletim sistemleri gibi bazı formatlar COFF ve ELF, farklı sistem türlerinde tanımlanmış ve kullanılmıştır. Aynı dosya formatının her ikisinin de kullanılması mümkündür. bağlayıcı girdi ve çıktı ve dolayısıyla kütüphane ve çalıştırılabilir dosya formatı.[2]:s sayfa 16 Bazı biçimler, farklı işlemciler için makine kodu içerebilir ve doğru olanı program yüklendiğinde işletim sistemi tarafından seçilir.[3]

Bazı sistemler, doğrudan çalıştırılabilen dosyalar ile bağlayıcı tarafından işlenmesi gereken dosyalar arasında bir ayrım yapar. Örneğin, OS / 360 ve halefleri ilk biçimi a yükleme modülü ve ikincisi bir nesne modülü. Bu durumda dosyalar tamamen farklı formatlara sahiptir.

Bir nesne dosyası formatının tasarımı ve / veya seçimi, genel sistem tasarımının önemli bir parçasıdır. Bağlayıcının performansını etkiler ve dolayısıyla programcı bir program geliştirilirken geri dönüş. Biçim yürütülebilir dosyalar için kullanılıyorsa, tasarım aynı zamanda programların koşmaya başla ve dolayısıyla cevaplanabilirlik kullanıcılar için.

Mutlak nesne dosyaları

Birçok eski bilgisayar veya küçük mikro bilgisayarlar, yalnızca mutlak bir nesne biçimini destekler. Programlar yeniden konumlandırılamaz; belirli, önceden tanımlanmış adreslerde çalışmak için birleştirilmeleri veya derlenmeleri gerekir. Dosya yer değiştirme veya bağlantı bilgisi içermiyor. Bu dosyalar okuma / yazma belleğine yüklenebilir veya sadece hafızayı oku. Örneğin, Motorola 6800 MIKBUG monitör, mutlak bir nesne dosyasını okumak için bir yordam içerir (SREC Biçimi ) itibaren kağıt bant.[4] DOS COM dosyaları mutlak nesne dosyalarının daha yeni bir örneğidir.[5]

Segmentasyon

Çoğu nesne dosyası biçimi, her bölüm belirli bir veri türü içeren ayrı veri bölümleri olarak yapılandırılmıştır. Bu bölümler, "teriminden dolayı" segmentler "olarak bilinir.bellek bölümü ", daha önce ortak bir biçim olan hafıza yönetimi. Bir program, bir program tarafından belleğe yüklendiğinde yükleyici yükleyici, programa çeşitli bellek bölgelerini tahsis eder. Bu bölgelerden bazıları, nesne dosyasının segmentlerine karşılık gelir ve bu nedenle genellikle aynı adlarla bilinir. Yığın gibi diğerleri yalnızca çalışma zamanında var olur. Bazı durumlarda, yer değiştirme yükleyici (veya bağlayıcı) tarafından gerçek bellek adreslerini belirlemek için yapılır. Bununla birlikte, birçok program veya mimari için, sistem tarafından ele alındığı için yeniden yerleştirme gerekli değildir. bellek yönetim birimi veya tarafından konumdan bağımsız kod. Bazı sistemlerde, nesne dosyasının segmentleri, daha fazla işleme gerek kalmadan belleğe kopyalanabilir (sayfalanabilir) ve çalıştırılabilir. Bu sistemlerde bu yapılabilir tembelyani, yalnızca yürütme sırasında segmentlere referans verildiğinde, örneğin bir bellek eşlemeli dosya nesne dosyası tarafından desteklenir.

Tipik nesne dosyası formatları tarafından desteklenen veri türleri:[6]

Farklı nesne dosyalarındaki segmentler, segmentler tanımlanırken belirtilen kurallara göre bağlayıcı tarafından birleştirilebilir. Nesne dosyaları arasında paylaşılan segmentler için kurallar mevcuttur; örneğin, içinde DOS var farklı bellek modelleri özel bölümlerin isimlerini ve bunların birleştirilip birleştirilemeyeceğini belirten.[7]

Hata ayıklama bilgileri, aşağıdaki gibi nesne dosya formatının ayrılmaz bir parçası olabilir. COFF veya a yarı bağımsız format gibi birkaç nesne formatıyla kullanılabilen bıçaklar veya CÜCE.

GNU Projesi 's İkili Dosya Tanımlayıcı kitaplığı (BFD kitaplığı) ortak bir API çeşitli formatlarda nesne dosyalarının işlenmesi için.

Referanslar

  1. ^ Wrubel, Mareşal H. (1959). Dijital bilgisayarlar için bir programlama astarı. New York: McGraw-Hill. s. 222. Alındı 31 Temmuz 2020.
  2. ^ IBM Corporation (1973). IBM OS Linkage Editor ve Loader (PDF). Alındı 2012-08-06.
  3. ^ "FatELF: Linux için Evrensel Binaryler". Alındı 2 Ağu 2020.
  4. ^ Wiles, Mike; Felix, Andre. MCM6830L7 MIKBUG / MINIBUG ROM'u (PDF). Motorola Semiconductor Products, Inc. Alındı 31 Temmuz 2020.
  5. ^ Godse, D.A .; Godse, AP (2008). Mikroişlemci - I (İlk baskı). Pune: Teknik Yayınlar. s. 3-15. ISBN  978-81-8431-355-0.
  6. ^ Mauerer, Wolfgang (2010). Profesyonel Linux Kernel Mimarisi. John Wiley & Sons. s. Ek E: ELF İkili Biçimi. ISBN  978-0-470-34343-2. Alındı 1 Ağu 2020.
  7. ^ Irvine, Kip R. (1993), IBM-PC için Assembly dili (2. baskı), New York: Macmillan, ISBN  0-02-359651-1

daha fazla okuma