Unix'te soyulmuş ve soyulmayan çalıştırılabilirler nelerdir?


37

Gönderen adam dosyası ,

EXAMPLES
   $ file file.c file /dev/{wd0a,hda}
   file.c:   C program text
   file:     ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
             dynamically linked (uses shared libs), stripped
   /dev/wd0a: block special (0/0)
   /dev/hda: block special (3/0)
   $ file -s /dev/wd0{b,d}
   /dev/wd0b: data
   /dev/wd0d: x86 boot sector
   $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
   /dev/hda:   x86 boot sector
   /dev/hda1:  Linux/i386 ext2 filesystem
   /dev/hda2:  x86 boot sector
   /dev/hda3:  x86 boot sector, extended partition table
   /dev/hda4:  Linux/i386 ext2 filesystem
   /dev/hda5:  Linux/i386 swap file
   /dev/hda6:  Linux/i386 swap file
   /dev/hda7:  Linux/i386 swap file
   /dev/hda8:  Linux/i386 swap file
   /dev/hda9:  empty
   /dev/hda10: empty

   $ file -i file.c file /dev/{wd0a,hda}
   file.c:      text/x-c
   file:        application/x-executable, dynamically linked (uses shared libs),
   not stripped
   /dev/hda:    application/x-not-regular-file
   /dev/wd0a:   application/x-not-regular-file

Yürütülebilir sıyırma ne anlama gelir?

Diğerleri olmasa da neden bazı çalıştırılabilirler?

Yanıtlar:


50

Bir yürütülebilir dosyayı gcc'nin -g bayrağıyla derlerseniz, hata ayıklama bilgilerini içerir. Bu, her bir komut için, onu oluşturan kaynak kodun hangi satırının oluşturduğu, kaynak koddaki değişkenlerin adının tutulduğu ve çalışma zamanında vb. Eşleşen hafızaya eşleştirilebileceği anlamına gelir. Şerit bu hata ayıklama bilgisini ve içerilen diğer verileri kaldırabilir. Yürütülebilir dosyanın boyutunu azaltmak için yürütme için gerekli olmayan çalıştırılabilir dosyada.


10
Ayrıca şerit (1) kılavuz sayfasına bakınız . Genel olarak strip, kesinlikle gerekli olmadıklarından tüm sembolleri kaldırır; hata ayıklama bilgilerini de kaldırıyor, ancak semboller büyük bir şey
Michael Mrozek

3
Konsept çoğu yürütülebilir formata genellenir, bu gcc'ye veya hatta unix'e özgü değildir.
Gilles 'SO- kötülük' dur

4
Elimden çıkarıldığında 6 MB'a düşürülen 40 MB'lık bir çalıştırılabilir dosya vardı - bu sayede hata ayıklama verilerinin kapladığı alan hakkında bir fikir edinebilirsiniz.
Nathan Osman

Yani, bir yürütülebilir sıyırma gelmez prog.eile inşa edilmiş gcc -g -o prog.e prog.colan derleme sen alır eşdeğer gcc -O0 -o prog.e prog.c?
ysap

1
@ysap no, optimizasyon ile ilgisi yok (-O). Derleme kodu, dosyanın soyulup soyulmadığı ile aynı kalır. Hata ayıklama bilgisi olmadan (yani "-g" kaybı konusunda haklısın) ve tüm semboller olmadan (yani işlev adları, genel değişken adları ...) çalıştırılabilir bir dosya elde edersiniz . "Gcc -s -o prog.e prog.c" ifadesinin eşdeğeridir. Bir program yürütüldüğünde, semboller herhangi bir fark yaratmaz. Ancak, örneğin, özel yazılım her zaman elimden sembollere sahiptir çünkü aksi halde herkes orijinal işlev adlarını ve konumlarını bilir.
Pikrass
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.