Yürütülebilir dosyalar ve Paylaşılan nesneler


13

Yaparken bir şey fark ettim find /bin -exec file {} \;:

filekomut bazı kayıtlar raporlar /binvardır shared objectsiken diğerleri gibi executables. Örneğin,

/ bin / ntfsck: GNF / Linux 2.6.24, BuildID [sha1] = 312d93fd0d8653e7236a61db2e67b93c63225a00, sıyrılarak
ELF 64 bit LSB paylaşılan nesnesi , x86-64, sürüm 1 (SYSV)

İçin aynı rapor gawk

/ usr / bin / gawk:
ELF 64 bit LSB paylaşılan nesnesi , x86-64, sürüm 1 (SYSV),
dinamik olarak bağlı (paylaşılan kütüphaneleri kullanır), GNU / Linux 2.6.24,
BuildID [sha1] = 76bb13aac7e212164bd6e0d7b8a5d92db44543c9, soyulmuş

Buna karşılık fileiçin /bin/echogeçerli:

/ bin / echo:
ELF 64 bit LSB yürütülebilir , x86-64, sürüm 1 (SYSV),
GNU / Linux 2.6.24,
BuildID [sha1] = 193e75fc13e9c4599e772b8d79125a5934cf601c, soyulmuş

Esasen, executabledosyalar ve shared objectdosyalar arasındaki farkın ne olduğunu bilmek istiyorum .


Yanıtlar:


14

Tl, Dr.

Derlenmiş bir yürütülebilir dosyanın paylaşılan bir nesneye bağlanabileceği, ancak yürütülebilir bir dosyaya bağlanmayabileceği gerçeği dışında bir fark yoktur.


Genel olarak, 1 yürütülebilir dosyayı derlemenin iki yolu vardır :

  • Statik bağlantı kullanarak: kaynak koduna dahil edilen harici kütüphaneler derlenir ve derlenmiş kütüphane (veya bağlayıcı perspektifindeki nesne) yürütülebilir dosyanın kendisine eklenir;
  • Bağlama kullanılması Dinamik: dış derlenen kaynak kodu dahil kütüphaneleri, ancak bir bağlantı (linker'ın perspektif olarak veya nesne) derlenmiş kitaplığa yürütülebilir ilave edilir (ve derlenen kitaplıkları / nesneler çalıştırma sırasında eğer bağlayıcı ile yüklenir ) gerekli;

Bu yöntemlerin her birini kullanmanın avantajları / dezavantajları vardır, ancak sorunun konusu bu değildir;

  • /bin/ntfsckve /usr/bin/gawkpaylaşılan nesnelerdir: bu, bir yürütülebilir dosyanın derlenebilir ve işlevlerini kullanmak için bunlarla ilişkilendirilebileceği anlamına gelir;
  • /bin/echobir çalıştırılabilir: bir yürütülebilir kudreti, bu araçlar değildir derlenmiş ve daha sonra düzgün görüntülemek için buna karşı bağlanabilir;

Bu nedenle /bin/ntfsckve /usr/bin/gawkteknik olarak derlenmiş kütüphaneler (veya bağlayıcı perspektifindeki nesneler), ancak bir kişinin gördüğü gibi, paylaşılan bir nesnenin yürütülebilir olarak çalıştırılmasını engellemez.

Bir yan notta, fileraporların (her biri için) aşağıdakilere de dikkat edin :

dinamik olarak bağlandı (paylaşılan kütüphaneleri kullanır)

Bu, her birinin dinamik olarak diğer paylaşılan nesnelere de bağlı olduğu (ve muhtemelen kullandığı) anlamına gelir.


1. Ön işleme, derleme ve bağlantıyı içeren daha geniş kabulünde amaçlanan "Derleme".


1
diğer paylaşılan nesnelere dinamik olarak bağlı , IN OS? veya kendi içinde paylaşılan kütüphaneler ?!
Dr.jacky

@ Mr.Hyde İşletim sisteminde, daha özel olarak bağlayıcıda önceden yapılandırılması gereken konumlarda, bağlayıcı gerektiğinde bunları çalışma zamanında yükleyebilir. Bkz burada , bölüm 3.2.
kos

Bir dlopen kullanarak yürütülebilir bir dosyaya bağlanabilir: D örnek
Adam Zahran

6

Diğer bir fark, yürütülebilir dosyaların tanımlı bir giriş noktası adres ofseti olmasıdır, yani i386 için 0x08048000, x86 için 0x00400000 ve kol için 0x00010000.

Paylaşılan bir nesne dosyası bir kütüphane olabilir, aynı zamanda yürütülebilir bir dosya olabilir. Yürütülebilir olduğunda, böyle bir mahsup yoktur. Bir paylaşılan nesne yürütülebilir , bu yüzden söylemek, adres alanı düzeni randomizasyon (ASLR) kullanarak pozisyonel bağımsız çalıştırılabilir (PIE) 'dir. Bu nedenle, / proc / pid / maps dosyasına baktığınızda, yüklenen segmentlerin konumunun standart yürütülebilir dosyaların aksine her yürütmede farklı olduğunu fark edeceksiniz.

Bu özelliğin arkasındaki fikir, saldırganların dönüş odaklı programlama saldırıları gerçekleştirmesini engelleyerek yürütülebilir dosyalara güvenlik eklemektir. Birçok bakımcı, örneğin Fedora 23'ten veya Ubuntu 17.10'dan beri varsayılan olarak PIE etkinleştirilmiş paketler oluşturmaya karar verdi.


İlginç bir cevap. Birkaç kaynak yok (özellikle giriş noktası bölümü için birkaç bağlantı eklerseniz iyi olurdu) ama bu konuda birkaç stackoverflow soru aradım. Ama kesinlikle iyi bir cevap.
Sergiy Kolodyazhnyy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.