Niedawno zorientowałem się, że Mac OS X faktycznie może uruchamiać aplikacje 64-bitowe (x64), nawet jeśli jądro x86 jest załadowane. To było dla mnie szokujące po raz pierwszy.
Ale potem zdałem sobie sprawę, że to naprawdę dziwne, jeśli system działa pod procesorem kompatybilnym z x64, nie może uruchamiać aplikacji x64, bez względu na to, jakie jądro zarządza procesami. Czy to naprawdę takie trudne? Wystarczy załadować tę cholerną aplikację do pamięci i ustawić wskaźnik działania procesora na pierwszy bajt, to proste!
Jedyną barierą, jaką można to zrobić, jak mogłem sobie wyobrazić, są jakieś „nagłówki wykonywalne”. Niestety nie czuję się dobrze z architekturą Windows i strukturą binarną, dlatego potrzebuję więcej wyjaśnień tutaj.
De facto UNIXopodobnych binarny standardowy nagłówek ELF ma to brat ELF64, który (jako dokument tutaj opisano) nie ma wiele różnic z Elf32, ale mimo jądra 32-bitowe nie są w stanie uruchomić kod x64. Tak, ten program jest prawdopodobnie powiązany z bibliotekami x64 i pozwala sobie wyobrazić, że właśnie skopiowaliśmy i wkleiliśmy je bezpośrednio do folderu / usr / lib64. Ale jestem pewien, że to nie pomaga, dlaczego?
I wreszcie, co jest takiego specjalnego w jądrze Mac OS X, aby nie martwiło się o zestaw instrukcji programu? Czy Mac OS X ma jakiś uniwersalny i odpowiedni dla nagłówka plików wykonywalnych obu jąder, więc może po prostu załadować aplikację do pamięci i powiedzieć procesorowi „wykonać od razu, nie mam nic przeciwko temu”.
PS: Naprawdę zastanawiałem się, gdzie umieścić to pytanie: na stackoverflow.com lub superuser.com, i postanowiłem umieścić tutaj, ponieważ temat jest prawdopodobnie bardziej specyficzny dla systemu operacyjnego.
uname -a
jądra pod x86 prawdopodobnie wyglądały mniej więcej tak:Darwin MacMini.local 11.1.0 Darwin Kernel Version 11.1.0: Tue Jul 26 16:07:11 PDT 2011; root:xnu-1699.22.81~1/RELEASE_i386 i386