Linux, (metin olmayan) bir ikili dosyayı çalıştırmak için hangi olanakların kullanılacağını nasıl belirler?


23

Linux’un, komut dosyası dilleri için hangi tercümanı kullanacağını belirlemek için Shebang satırını kullandığını biliyorum, ancak bu ikili dosyalar için nasıl çalışıyor?

Ben Linux ikilileri çalıştırabilir demek ve her iki taktıktan şarap ve mono , Windows'u yerli ve .NET ikili. Ve hepsi için sadece ./binary-name(PATH'ta değilse) çalıştırmak.

Belirli bir ikili (kullanarak bir Windows yerel ikili olarak, Linux native ikili olarak çalıştırmak gerektiğini nasıl Linux karar veriyor şarap tesisleri) veya Windows .NET ikili olarak (kullanarak mono tesisleri)?

Yanıtlar:


29

Bir kelime: binfmt_misc . Linux'a özgü, taşınabilir olmayan bir tesistir.

Çekirdek tarafından yerleşik mantıkla tanınan birkaç biçim vardır. Yani, bunlar ELF formatı (normal ikili dosyalar için) ve shebang kongre (scriptler için). ( cevabın sonraki kısmı için zwol'a teşekkürler ). Ek olarak, Linux bir kaç ezoterik veya eskimiş veya uyumluluk yerleşik formatını tanır. Muhtemelen onlarla karşılaşmayacaksın. Onlar a.out"em86", "düz" ve "elf_fdpic" dir.

Geriye kalan her şey binfmt_misc sistemi üzerinden kaydedilmelidir. Bu sistem, çekirdeğe, sihirli bir sayıya ve karşılık gelen tercümana göre basit bir desen kontrolü kaydetmenizi sağlar.


6
OP açıkça Linux istese de, hem Linux hem de diğer Unix benzeri sistemlerde çalışan diğer birçok çözümden farklı olarak, bunun tamamen Linux'a özgü olduğunu belirtmekte fayda var.
cubuspl42

6
a.outDerlenmemiş olabilir, ancak Linux kaynak ağacı hala normal ELF'in yanı sıra "em86", "flat" ve "elf_fdpic" formatları için özgün destek içeriyor . Em86 dışındakilerin hepsi yerel ikili çalıştırılabilir formatlar gibi görünüyor; Birinin ne zaman "düz" veya "elf_fdpic" kullanacağını bulmak için yeterli bilgi yok. em86, belirli bir x86 öykünücüsünü çalıştırmak için bir binfmt_misc mekanizması gibi görünüyor, muhtemelen geriye dönük uyumluluk için hala var.
zwol

2
Debian Linux'ta (RedHat ve diğerlerini kontrol etmedim) mevcut tüm binfmt girişlerini görüntülemek için kullanılan komut şudurupdate-binfmts --display
golem
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.