Запуск исполняемых файлов в Linux и Windows отличается по нескольким параметрам:
- Определение исполняемости файла. telegra.ph В Windows исполняемые файлы обычно имеют расширение .exe. telegra.ph В Linux система определяет исполняемость файла не по расширению, а по специальному флагу исполняемости. pq.hosting Если файлу предоставлено разрешение на выполнение, система поймёт, что его можно запустить. telegra.ph
- Внутренний формат исполняемых файлов. stackoverflow.com Windows использует PE-формат, а Linux — ELF (исполняемый файл и формат привязки). stackoverflow.com Windows не знает, как загружать и выполнять файлы ELF, а Linux — как загружать и выполнять файлы PE. stackoverflow.com
- Системные вызовы. habr.com Набор системных функций и способы их вызова в каждой ОС разные. habr.com Например, в Linux для вызова функции read() бинарник записывает в регистр дескриптор файла, в регистр %rsi — указатель буфера, а в %rdx — количество байт для чтения. habr.com Однако в ядре Windows нет функции read(), поэтому ни один из аргументов не имеет там смысла. habr.com
Для запуска исполняемых файлов в Linux из Windows можно использовать оболочку совместимости, например, WINE, а для запуска исполняемых файлов Linux в Windows — LINE. stackoverflow.com