Nesne dosyası - Object file

Bir nesne dosyası içeren bir bilgisayar dosyası nesne kodu olan, makine kodu , bir çıkış assembler veya derleyici . Nesne kodu genellikle yeri değiştirilebilir ve genellikle değil doğrudan yürütülebilir . Nesne dosyaları için çeşitli biçimler vardır ve aynı makine kodu, farklı nesne dosyası biçimlerinde paketlenebilir. Bir nesne dosyası , paylaşılan bir kitaplık gibi de çalışabilir .

Nesne kodunun kendisine ek olarak, nesne dosyaları aşağıdakiler dahil olmak üzere bağlantı veya hata ayıklama için kullanılan meta verileri içerebilir : farklı modüller arasındaki sembolik çapraz referansları çözmek için bilgiler, yer değiştirme bilgileri, yığın çözme bilgileri, yorumlar , program sembolleri , hata ayıklama veya profil oluşturma bilgileri. Diğer meta veriler, derlemenin tarihini ve saatini, derleyici adını ve sürümünü ve diğer tanımlayıcı bilgileri içerebilir.

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

Programcı tarafından yazılan bir kaynak programı cebirsel gösterime benzer bir dile çevirerek makine tarafından üretilen makine dili programı için otomatik programlamada kullanılan bir terim.

Bir bilgisayar programcısı, bir derleyici veya birleştirici ile nesne kodu üretir . Örneğin, Linux altında , GNU Derleyici Koleksiyonu derleyicisi, ELF biçimini kullanan .o uzantılı dosyalar üretecektir . Windows'ta derleme , COFF biçimini kullanan .obj uzantılı dosyalar oluşturur . Daha sonra, nesne kodunu bir yürütülebilir programda veya gerektiğinde önceden derlenmiş sistem kitaplıklarını çeken kitaplıkta birleştirmek için bir bağlayıcı kullanılır. JavaScript programları vardır yorumlanır ederken Python ve Java programları içine derlenmektedir baytkod dosyalarının.

Nesne dosya biçimleri

Birçok farklı nesne dosyası formatı vardır; Başlangıçta her bilgisayar türünün kendine özgü formatı vardı, ancak Unix ve diğer taşınabilir işletim sistemlerinin ortaya çıkmasıyla ELF ve COFF gibi bazı formatlar tanımlanmış ve farklı sistem türlerinde kullanılmıştır. Aynı formatın hem linker giriş ve çıkış olarak hem de kütüphane ve çalıştırılabilir dosya formatı olarak kullanılması mümkündür. Bazı biçimler, program yüklendiğinde işletim sistemi tarafından doğru olanı seçilerek farklı işlemciler için makine kodu içerebilir.

Bazı sistemler, doğrudan çalıştırılabilir formatlar ile bağlayıcı tarafından işlenmesini gerektiren formatlar arasında bir ayrım yapar. Örneğin, OS/360 ve ardılları ilk biçimi bir yük modülü ve ikincisini bir nesne modülü olarak adlandırır . Bu durumda dosyalar tamamen farklı biçimlere sahiptir.

Bir nesne dosya formatının tasarımı ve/veya seçimi, genel sistem tasarımının önemli bir parçasıdır. Bir program geliştirilirken bağlayıcının performansını ve dolayısıyla programcı geri dönüşünü etkiler . Yürütülebilir dosyalar için biçim kullanılıyorsa, tasarım programların çalışmaya başlaması için geçen süreyi ve dolayısıyla kullanıcıların yanıt verme hızını da etkiler .

Mutlak nesne dosyaları

Birçok eski bilgisayar veya küçük mikrobilgisayar , yalnızca mutlak bir nesne biçimini destekler. Programların yeri değiştirilemez; belirli, önceden tanımlanmış adreslerde yürütülmeleri için birleştirilmeleri veya derlenmeleri gerekir. Dosya hiçbir yer değiştirme veya bağlantı bilgisi içermiyor. Bu dosyalar okuma/yazma belleğine yüklenebilir veya salt okunur bellekte saklanabilir . Örneğin, Motorola 6800 MIKBUG monitör, kağıt banttan bir mutlak nesne dosyasını ( SREC Formatı ) okumak için bir rutin içerir . DOS COM dosyaları , mutlak nesne dosyalarının daha yeni bir örneğidir.

segmentasyon

Çoğu nesne dosyası biçimi, her bölüm belirli bir veri türünü içeren ayrı veri bölümleri olarak yapılandırılmıştır. Bu bölümler, daha önce yaygın bir bellek yönetimi biçimi olan " bellek bölümü " terimi nedeniyle "segment" olarak bilinir . Bir program bir yükleyici tarafından belleğe yüklendiğinde , yükleyici programa belleğin çeşitli bölgelerini tahsis eder. Bu bölgelerden bazıları, nesne dosyasının bölümlerine karşılık gelir ve bu nedenle genellikle aynı adlarla bilinir. Yığın gibi diğerleri yalnızca çalışma zamanında bulunur. Bazı durumlarda, gerçek bellek adreslerini belirtmek için yükleyici (veya bağlayıcı) tarafından yer değiştirme yapılır. Bununla birlikte, birçok program veya mimari için, bellek yönetim birimi tarafından veya konumdan bağımsız kod tarafından işlendiğinden, yer değiştirme gerekli değildir . Bazı sistemlerde, nesne dosyasının bölümleri daha sonra başka bir işleme gerek kalmadan belleğe kopyalanabilir (disk belleğine alınabilir) ve yürütülebilir. Bu sistemlerde, bu tembel bir şekilde , yani yalnızca yürütme sırasında segmentlere, örneğin nesne dosyası tarafından desteklenen bir bellek eşlemeli dosya aracılığıyla başvurulduğunda yapılabilir .

Tipik nesne dosya biçimleri tarafından desteklenen veri türleri:

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 kesimler için kurallar mevcuttur; Örneğin, içinde DOS vardır farklı bellek modelleri özel bölümlerin adlarını belirtmek ve onlar kombine edilebilir olsun veya olmasın.

Bilgi ayıklama birinde olarak hedef dosya biçimi ayrılmaz bir parçası olabilir COFF veya yarı-bağımsız biçimi gibi birkaç nesne biçimleri ile birlikte kullanılabilir stabs veya DWARF .

GNU Projesi 'ın İkili Dosya Tanıtıcı kütüphanesi (BFD kütüphanesi) ortak sağlar API çeşitli biçimlerde nesne dosyalarının manipülasyon için.

Referanslar

daha fazla okuma