Как работают исполняемые файлы?

Добрый день!

Не силен в знаниях, касаемо принципа работы ядра операционных систем. Собственно вопрос, если .exe форматы-программ могут компилироваться из разных языков программирования:

1. На каком "языке программированя" инструкции в самом .exe, или "прямые команды" для процессора?
2. Исполняются ли .exe программы как "отдельный поток" напрямую железом или компилируются ядром операционной системы?
3. В чем различие программ для разных операционных систем: Linux, Windows, Android и т.д.?
4. Как взаимодействует программа и операционная система, читал что на Windows так просто не получить к буферу вывода изображения на экран
5. Существенно ли различие архитектур разных устройств, тоесть можно ли к примеру запустить Windows/Linux на Android телефоне?
  • Вопрос задан
  • 3377 просмотров
Пригласить эксперта
Ответы на вопрос 4
saboteur_kiev
@saboteur_kiev
software engineer
.exe это довольно сложный формат.
Операционная система умеет прочитать необходимый код программы из exe, поместить его в память на предпочтительных адресах, залинковать ссылки на внешние библиотеки и запустить.
В .exe могут находиться другие ресурсы - иконки, музыка, картинки, которые могут подгружаться по мере необходимости, а не сразу.

Непосредственно код - это инструкции процессора.
Ответ написан
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
На каком "языке программированя" инструкции в самом .exe, или "прямые команды" для процессора?

В машинных кодах :) Все в итоге будет в машинных кодах. Хотя внутри .exe может быть много чего разного - вплоть до самораспаковывающегося архива или автономного скрипта, упакованного вместе с интерпретатором. Конкретный .exe может содержать кучу разных вещей, вовсе не относящихся к исполнению - например значки :)
Исполняются ли .exe программы как "отдельный поток" напрямую железом или компилируются ядром операционной системы?

Чо? Ведро - это не компилятор, оно ничего ни во что не компилирует. Ведро - это гигантских размеров привилегированная библиотека, которая может обращаться к дровам и железу.
В чем различие программ для разных операционных систем: Linux, Windows, Android и т.д.?

В том, что они для разных осей написаны. А разные оси предполагают разный формат обращения к API ведра для совершения одних и тех же действий. Например, открытие файла в Windows и Linux - будет выглядеть с точки зрения обращения к ведру - кардинально разными вызовами. Из этого же следует, что можно "имитировать" работу программы для одной ОС в другой. Так, например wine работает.
Как взаимодействует программа и операционная система, читал что на Windows так просто не получить к буферу вывода изображения на экран

Через опубликованное и документированное (а иногда и не очень документированное) API. Верно слышали - просто так не получить :)
Существенно ли различие архитектур разных устройств, тоесть можно ли к примеру запустить Windows/Linux на Android телефоне?

Весьма существенно. Линух на телефоне можно запустить - с танцами и битьем в огромный бубен, но можно - андроид в конце концов тоже линух :) Винду нет - она не поддерживает данную процессорную архитектуру (хотя виндофоны были - но сплыли...)
Ответ написан
Jump
@Jump
Системный администратор со стажем.
  • Да на любом, от машинного кода, до пайтона
  • Exe это не программа, а контейнер в который упаковываются разные данные - программы, текст, видео, и.т.д.. Поэтому исполнятся она не может - исполняется программа из этого файла.
  • В системных вызовах. Программа написанная под ОС не напрямую работает с железом, а через систему.
  • Программа обращается к ОС в определенном формате (API) и получает ответ и наоборот.
  • Да, существенно, чтобы запустить любую ОС на каком-то железе, нужно научить ее работать с этим железом.
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
1. ни на каком - в конце концов - это машинные коды (инструкции), выполняемые процессором.
2. скорее исполняются) но это не точно (с) ))) в подавляющем большинстве случаев какой-то кусок exe файла выполняется [в машинных кодах] и первое что он делает - берет остальные данные из этого же exe и интерпретирует их - то есть машинными кодами производит действия над содержимым и по результатам этих действий выполняет действия (опять же в машинных кодах)
3. в структуре исполняемого файла - там вначале есть своего рода оглавление и инструкции что с чем делать: "вот тут код который надо выполнить, а вот это надо просто положить в память и вот там в моем коде записать адрес куда положили... а еще мне надо вот такие-то библиотеки" - операционная система "запуская" exe файл - все проверяет и делает как в "оглавлении" прописано
4. программа обращается к системе (что тоже в "оглавлении" было написано и осперационная система предоставила) например для "пикнуть динамиком" надо обратится по адресу XXXXXX, поместив в регистр AX частоту пищания, в BX-длительность , а потом прочесть AL и если там не 0 - значит была ошибка
5. существуют отличия и зачастую они огромны, но существуют и методы обхода этого

естественно все очень и очень упрощенно
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы