Kendinizi destekleyin, bu soru muhtemelen saf olmayan ve / veya aptal görünecek, unix benzeri sistemlerin içsel çalışmalarında göreceli olarak yeni olduğumu ve genel olarak programlandığımı görecek.
Hazır? Tamam! Ben gittikçe artan, yaklaşık 3 seviyelik bir gülünçlük yaşayacağım.
Benzer donanıma sahip iki sistemimiz var (ana nokta işlemci olmak, standart bir intel core 2 duo diyelim).
Biri çalışıyor (linux dağıtımınızı buraya yerleştirin: Ubuntu bundan sonra kullanılacak) ve diğeri ise Mac OS X diyelim.
Bir eşdeğer bir program derler, şöyle bir şey söyleyelim:
int main()
{
int cat = 33;
int dog = 5*cat;
return dog;
}
Kod son derece basittir, çünkü henüz paylaşılan kütüphanelerin etkilerini düşünmek istemiyorum.
İlgili sistemlerde derlendiğinde. Çıktı arasındaki temel fark, Mach-O vs ELF meselesi değil midir? Biri formatlamanın her ikilikini sıyırırsa, düz bir ikili bırakırsa, demonte edilen makine talimatları aynı olmaz mıydı? (derleyici alışkanlıklarına / eğilimlerine bağlı olarak belki de birkaç farkla).
1.) Ubuntu sistemimizden üretilen düz ikilinin yeniden paketlenmesi için bir program geliştirildiyse, Mach-O biçimlendirmesinde Mac OS X sisteminde çalışır mıydı? Öyleyse, yukarıda sözde programın derlenmiş bir ikili dosyası varsa ve bir tanesi düz ikili dosyaları yeniden paketlemek için bu mistik araca sahip olsaydı, basit programlar Mac OS X sisteminde çalıştırılabilir mi?
Şimdi biraz daha ileri götürelim.
Şimdi aşağıdaki gibi kaynaklara sahip bir programımız var:
#include <stdio.h>
int main()
{
printf("I like tortoises, but not porpoises");
return 0;
}
2.) Bu programın derlenmiş ve statik olarak bağlı olduğunu varsayarsak, sihirli programımız hala ham ikiliyi Mach-O formatında yeniden paketleyebilecek ve mac os X üzerinde çalışabilecek mi? Başka herhangi bir ikili dosyaya güvenmesine gerek kalmayacağını görmek (bunun için mac sisteminin bu durumda olmayacağı)
Ve şimdi son seviye için;
3.) Bu gerekli programı tüm gerekli paylaşılan kütüphaneleri Mach-O formatına dönüştürmek için kullandıysak ve bunun yerine yukarıdaki programı dinamik bağlantı ile derledik. Program hala çalışmayı başarabilir mi?
Şimdilik böyle olmalı, açıkçası her saçmalık adımının bir önceki temele dayanması, hatta mantıklı olması bile gerekiyor. Bu nedenle, ilk direk tahrip olursa, geri kalan katmanlara hak edeceğinden şüpheliyim.
Kesinlikle GUI'nin aklında olduğu programlarla bunu düşünecek kadar ileri gitmeyeceğim. Pencere sistemleri büyük olasılıkla başka bir baş ağrısı olur. Bu aşamada sadece komut satırı programlarını düşünüyorum.
Şimdi, dünyayı beni düzeltmeye davet ediyorum ve saçma düşünme çizgimde yanlış olan her şeyi bana anlat.