4/21/2009

Учим Linux запускать exe файлы.

Как известно в Linux по умолчанию используется ELF (Executable and Linkable Format) формат исполняемых файлов.
Однако, не составляет труда обучить ядро Linux запускать любые другие исполняемые файлы (.exe файлы для Windows, скрипты на shell, python, байткод java и т.д.) без явного указание эмулятора Т.е. в командной строке можно просто написать ./notepad.exe или ./my_script.py.
Для этого нужно обеспечить ядро необходимой информацией о формате исполняемого файла, и о том, каким образом и с помощью чего его можно интерпретировать.

Что для этого нужно?

1. Для этого нужно включить в ядре поддержку остальных исполняемых форматов:

В секции Executable file formats / Emulation-->
Опция Kernel support for MISC binaries



Можно или встроить эту возможность в ядро, или оформить ее в качестве отдельного модуля. Модуль будет называться binfmt_misc.

2. Подмонтировать файловую систему binfmt_misc в каталог /proc:
mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc

3. Перейти в каталог /proc/sys/fs/binfmt_misc. У вас тут должно лежать два файла: register и status

4. Описать формат и интерпретатор для этого формата:

Для того что зарегистрировать новый формат исполняемого файла и интерпретатор для него нужно добавить в файл register строку в формате:
:name:type:offset:magic:mask:interpreter:flags
Вот что значат приведенные поля:
  • 'name' - строковый идентификатор. В каталоге /proc/sys/fs/binfmt_misc будет создан новый файл с именем name
  • 'type' - способ распознавания. Может быть 'M' для волшебства и 'E' для расширения.
  • 'offset' - смещение маски в файле,считается в байтах. Этот параметр по умолчанию равен 0, если вы его не указываете (например: ':name:type::magic...')
  • 'magic' - последовательность байт для соответствия которой и определяется binfmt_misc. Строка поля magic может содержать шестнадцатириные символы, такие как \x0a или \xA4.
  • 'mask' маска (опциональна, по умолчанию имеет значение 0xff) . Добавляя строку как в поле magic и такой же длины, вы можете маскировать соответствие некоторых битов файла.
  • 'interpreter' - программа, которая должна быть выполнена вместе с исполняемым фалйлом, как первый аргумент (Необходимо указывать полный путь)
  • 'flags' - опциональное поле, которое контролирует нектороые аспекты вызова интерпретатора
Например для запуска windows приложений с помощью wine в качестве интерпретатора в register нужно добавить такую строку:

':DOSWin:M::MZ::/usr/bin/wine:

Вот так:

echo ':DOSWin:M::MZ::/usr/bin/wine:' > register

Теперь в каталоге /proc/sys/fs/binfmt_misc у нас появился файл DOSWin следующего содержания:

$bash: cat DOSWin
enabled
interpreter /usr/bin/wine
flags:
offset 0
magic 4d5a

После всего этого в командной строке можно написать ./notepad.exe и у вас запустится notepad с помощью wine'a.

5. Для того, чтобы binfmt_misc не пришлось монтировать каждый раз вручную, в /etc/fstab можно добавить вот такую строчку:
none /proc/sys/fs/binfmt_misc binfmt_misc defaults 0 0

6. Для того, чтобы отключить интерпретацию формата, нужно записать 0 в появившийся файл:
echo 0 > DOSWin

для того чтобы включить, нужно записать 1 :

echo 1 > DOSWin

7. Для того чтобы удалить формат, нужно записать -1 в имя файла этого формата:
echo -1 > DOSWin

8 комментариев:

  1. а wine не проще ли установить

    ОтветитьУдалить
  2. А вы внимательней прочитайте ;-)
    Как раз установленный wine и используется.
    Вообще wine используется в качастве примера.

    ОтветитьУдалить
  3. По сути wine ставится не как программа, а как модуль...или я не правильно понял?

    ОтветитьУдалить
    Ответы
    1. wine ставится как программа и она работает в пространстве пользователя.
      У каждого исполняемого файла есть заголовок.
      По этому заголовку ядро определяет какой "интерпретатор" для исполняемого файла вызвать.
      По умолчанию для ELF файлов вызывается ld-linux.so.
      А здесь мы ядру сказали, что если оно встрети PE executable коим является виндовый exe-шник, то ему следует вызвать wine чтобы запустить такой исполняемый файл.

      Удалить
  4. а как войти в секцию Executable file formats?

    ОтветитьУдалить
  5. Грибок - , вызываемый различными патогенными бактериями, считается одним из наиболее часто встречающихся заболеваний, характеризующихся широкой симптоматикой неприятных проявлений. Подхватить эту инфекционную болезнь можно практически везде: на пляже, в сауне, бассейне и любом общественном месте. Даже несмотря на тот факт, что на рынке присутствует бесконечное множество самых разных фармацевтических мазей и гелей, до появления на рынке инновационного препарата Варанга без траты значительного периода времени избавиться от болезнетворных микроорганизмов, влияющими не только на общеэстетический вид ногтей и кожные покровы, но и наносят большой урон тканям, было очень трудно. Благодаря этому инновационному крему, с неподражаемым природным составом, ликвидация грибка теперь не является проблемой. Не занимает много времени и не требует, как раньше, множества усилий. Вылечить грибок стоп и ногтей можно после одного курса пользования мазью. VarangaOfficial - варанга купить спб - все, что бы хотели знать об этом препарате. Воспользовавшись нашим сайтом, вы сможете узнать полную и подробную информацию касающуюся представленного средства. Лично увидеть данные о проведенных клинических тестированиях, прочесть реальные отзывы пользователей и медицинского персонала. Изучить инструкцию по применению, прочесть особенности и методы работы комплекса, уяснить, как работает крем Варанга, где можно приобрести сертифицированный, оригинальный препарат и, как не нарваться на фальсификат. Мы очень тщательно проверяем размещаемые данные. Предоставляем пользователям нашего ресурса сведения, которые были почерпнуты исключительно из авторитетных источников. Если вы нашли у себя признаки появления грибкового заболевани или уже довольно продолжительное время, без ощутимых результатов стараетесь излечиться от этого неприятного недуга, на нашем сайте вы отыщете легкий и быстрый способ устранения проблемы. Приобщайтесь и живите здоровой полноценной жизнью. Благодаря нам, все ответы на самые волнующие вопросы, теперь собраны в одном месте на удобной в использовании и высоко информационном ресурсе.

    ОтветитьУдалить
  6. Я видел комментарии людей, которые уже получили ссуду от г-на Бенджамина Ли, и я решил подать заявку в соответствии с их рекомендациями, и всего через 5 дней я подтвердил свою ссуду на моем банковском счете на общую сумму 850 000,00 долларов США, которую я запросил. Это действительно отличная новость, и я советую всем, кому нужен настоящий кредитор, подать заявку по электронной почте: 247officedept@gmail.com или WhatsApp: + 1-989-394-3740. Я счастлив, что получил ссуду, о которой просил.

    ОтветитьУдалить