Скопируйте машинный код из исполняемого файла Windows и запустите на Linux - PullRequest
1 голос
/ 04 сентября 2011

Я копирую машинный код функции в Windows.

Например:

void func()
{
    printf("hello");
}

В указанном выше случае я скопировал бы данные сегмента шестнадцатеричного кода func() и* Шестнадцатеричные данные printf(), а также другие зависимости и данные и их повторная привязка на другой машине под управлением Linux, будет ли возможно выполнить код на компьютере с Linux, если он будет правильно перекомпонован?

И если да, то будет ли это так?будет проблема с лицензированием?(Это законно?)

PS Вопрос касается вопроса распределенной системы.

Ответы [ 2 ]

6 голосов
/ 04 сентября 2011

Существует wine программа (и проект) , которая не является эмулятором.Он возьмет исполняемый файл из Windows и запустит его непосредственно в Linux.Наиболее используемый WinAPI будет переведен в linux и в графическую систему X11.

Если вы хотите просто запустить exe-файлы из windows под linux - это будет ответом.Если вы хотите знать, как это сделать, вы можете прочитать источники Wine и / или документацию по вину и / или статьи о вине и его дизайне.Или спросите авторов вина в списке рассылки.

1 голос
/ 04 сентября 2011

Это довольно расплывчатый / неопровержимый вопрос, но это будет чрезвычайно сложно, если не невозможно.У вас есть ряд трудностей, которые нужно будет решить.А именно, формат исполняемого файла (ELF в Linux, против PE в Windows), соглашения о вызовах между системами / компиляторами и т. Д.

Самая большая проблема, о которой я могу подумать, заключается в том, что обработка файлов между Linux и Windowsочень разные.Лучше всего было бы не копировать printf (), а перенаправить этот вызов в реализацию Windows, потому что после того, как все функции библиотеки работают, низкоуровневая запись в консоль сильно отличается.

...