Я новичок, когда дело доходит до использования файлов машинного кода !!!

Мне нужно использовать исполняемый файл машинного кода, полученный как ELF (Linux), в исполняемый файл для Windows. Я пробовал 'objconv', но, хотя формат предлагает использовать '-fPE', когда я использую это, я получаю, что командная строка указывает 'Ошибка 2004 неизвестная командная строка' и 'Ошибка 2103 не может прочитать входной файл'. Я подозреваю, что существует некоторая несовместимость между платформами Linus и Windows.

2 ответа2

1

Хотя базовый объектный код может быть одинаковым для разных платформ, нетривиальные собственные приложения не могут быть двоично-совместимыми между Windows и Linux.

Если исполняемый файл Linux, который вы пытаетесь преобразовать, динамически связан, для этого потребуется присутствие библиотек, которых нет в Windows (вы можете увидеть этот список библиотек, запустив ldd /path/to/program на компьютере с Linux).

Даже если вы преобразовали все библиотеки в исполняемый формат PE или статически связали их, системные вызовы ядра NT и ядра Linux совершенно разные. Между ними нет прямой однозначной переписки.

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

0

Это почти наверняка не сработает. Linux и Windows не очень хорошо играют друг с другом. Приложение, которое вы хотите "преобразовать", должно быть перестроено из исходного кода для Windows (для этого потребуется специальное исправление для Windows). Если повезет, приложение, которое вы пытаетесь запустить, уже имеет порт Windows.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .