ассемблерах и сделать в объектный файл, то будет на всех платформах работать код?
Как ты эти объектные файлы потом объединишь?
в каждой операционной системе предполагается исполнимые файлы определенного формата, в реквизитах которых вшиты архитектуры процессоров для которых эти файлы. файл полиглот для ОС создать не получится. А вот на этапе загрузчика ОС такой полиглот включающий в себя код для разных архитектур может иметь место быть
И как определить, какой код надо исполнить?
если проц ошибку не выдал, значит всё ок - ну или всему крышка уже пришла
"значит всё ок" - не, значит некоторые опкоды совпали, и выполнились. Но на деле там выполнилось не то, что надо. Если выполнилось...
вот в этом и вся суть полиглотов, надо положить инструкции так, чтоб на разных архитектурах одна и та же последовательность байт приводила к прыжку на код уже исключительно для определенной архитектуры и ни на одной из целевых не давала исключений.
И такое реально?
у сообщения есть продолжение через "-"
"всему крышка" немного неточное описание происходящему.
для арм и х86 думаю да - полиглот собрать реально. но даже для пары процессоров это вынос мозга.
это наихудший вариант, когда звёзды на небе сошлись и из кода для другого проца получился осмысленный код для этого проца
Да с арм всё просто, какое-нибудь eb xx 00 eb уже даст два прыжка. Вот если ещё пару архитектур, тогда да, начнутся сложности.
Обсуждают сегодня