Меня всегда интересовало, как на самом деле работают исполняемые двоичные файлы. Компиляция всегда указывается как
взять исходный код и перевести его на машинный язык
Но что это на самом деле означает? А именно:
- Могу ли я переместить двоичный файл с компьютера A на компьютер B и ожидать, что он будет работать? (при условии, что я также перенесу соответствующие библиотеки)
- Каждый исполняемый двоичный файл предназначен для работы с конкретным процессором?
- Какая информация находится внутри исполняемого двоичного файла?
- Почему исполняемые файлы на Windows могут быть запущены на любой версии Windows? (Это другая история, если они работают)
- Почему я не могу запустить исполняемый файл Linux в Windows? Это имеет отношение к ядру (так не процессору)?
Имейте в виду, что у меня есть ограниченные знания о процессорах и компиляторах и ничего о сборке.