LINUX.ORG.RU
ФорумTalks

[конкурс] just for fun

 


0

0


что всё флейм да флейм, уже который год одно и то-же. давайте как-то поменяем формат что ли? в конце-концов, наши руки не для скуки.

предлагаю небольшое соревнование на забавный код. что-то с одной стороны простенькое и не требующее существенного времени на реализацию aka чтобы можно было сделать за вечер под пивко, но в то-же время чтобы была какая-то интересная изюминка.

моя версия.

задача: написать программу, которая бы запускалась и делала что-то более-менее осознанное на заданном множестве операционных систем как "родная". пусть это будут Linux и пачка BSD как IMHO наиболее доступные к пониманию. возьмём скажем тройку Linux+FreeBSD+NetBSD. желающий в принципе могут дополнить. для определённости пусть она ожидает от пользователя ввода числа, считает от него число Фибоначчи и выводит результат.

пояснения: это не скрипт, не байткод под VM, это именно машинный код чистой воды. a.out или ELF по желанию. "как родная" означает, что для исполнения программы не требуется каких-либо эмуляторов сторонних OS a'la linux emul в *BSD и иже с ними. с точки зрения OS это должен быть обычный честный исполняемый.

// wbr

Ответ на: комментарий от shimon

> Ты уверен, что оно на сях написабельно? /me чешет мозг и припоминает только ассемблер.

ну практически :) скорее всего, без пары-тройки мелких вставок на ассемблере не обойтись, но это не беда. вопрос ведь стоит не о переносимости между различными CPU но платформами.

// wbr

klalafuda ★☆☆
() автор топика

тчорт...у мну x86-64. Придётся использовать переключение режима процессора. Не смогу в данном случае :(

amoralyrr ★☆
()
Ответ на: комментарий от amoralyrr

> тчорт...у мну x86-64. Придётся использовать переключение режима процессора. Не смогу в данном случае :(

да бога ради, пусть это будет AMD64, не проблема :) по большому счёту, если сильно не задуряться по ассемблеру - чего делать явно не стоит - код должен быть более чем портабельным в пределах нескольких дефайнов.

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от generatorglukoff

> имею 400 метров чего-то, скачаного с фтпшника опенбзди. как Это поставить в куему?

не знаю, OpenBSD я никогда не ставил. для NetBSD достаточно подмонтировать образ ISO и тупо почти всё время жать OK :)

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от amoralyrr

> код портабельным то будет. Но тут говорили про бинарник, который везде заработает :)

ну с этой точки зрения да, собранный под AMD64 на i386 он скорее всего работать не будет. ну и ладно, если он будет работать под AMD64 но тем не менее на ряде платформ - это то-же более чем удовлетворяет условию задачи.

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от klalafuda

>ну с этой точки зрения да, собранный под AMD64 на i386 он скорее всего работать не будет.

Ну вообще-то можно собирать с -march=i686.

true
()

и там и там ELF, сисколы похожие, не очень интересно. А вот засунуть в PE до кучи, слабо? :)

anonymous
()
Ответ на: комментарий от true

> Ну вообще-то можно собирать с -march=i686.

а чем это поможет? все-таки i386 (не важно какой версии) != AMD64/EMT64. что прикажете делать процессору с mov rax, 12345; на i*86?

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от anonymous

сисколы разные. Во-первых разные номера, а во-вторых в пингвине параметры передаются через регистры, а во всех остальных *nix-системах через стек.

amoralyrr ★☆
()
Ответ на: комментарий от anonymous

> и там и там ELF, сисколы похожие, не очень интересно.

ну в общем и целом конечно же да :)

> А вот засунуть в PE до кучи, слабо? :)

да, я конечно же думал об этом :) по понятным причинам, ELF отпадает.

весь вопрос лишь в том, понимает ли ядро PE или нет. AFAIR NetBSD/FreeBSD понимают. по крайней мере ссылки на его поддержку в ядре есть. на сколько это соответствует правде и применимо к практике - вопрос открытый. если они действительно смогут по заголовку понять, что это PE, загрузить сегменты кода/данных и передать управление на точку входа, то проблема решена. если же нет... что там с PE в Linux я не знаю, никогда не интересовался :)

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от amoralyrr

> сисколы разные. Во-первых разные номера, а во-вторых в пингвине параметры передаются через регистры, а во всех остальных *nix-системах через стек.

это всё минорные проблемы, которые легко обходятся :)

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от klalafuda

собственно да. Тут я что-то не подумал. Но всё равно лучше средства операционки не использовать или использовать, но по минимуму.

amoralyrr ★☆
()
Ответ на: комментарий от amoralyrr

> собственно да. Тут я что-то не подумал. Но всё равно лучше средства операционки не использовать или использовать, но по минимуму.

ну системные то вызовы все равно придётся использовать, без этого никуда :)

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от klalafuda

>ну системные то вызовы все равно придётся использовать, без этого никуда :)

ну почему же. Не все. Ввод-вывод можно самому через биос написать например :)

amoralyrr ★☆
()
Ответ на: комментарий от amoralyrr

> ну почему же. Не все. Ввод-вывод можно самому через биос написать например :)

ну если у вас это получится, то будет очень любопытно взглянуть на реализацию под Linux :)

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от klalafuda

не вижу тут ничего сложного. В любом учебнике по ассемблеру для DOS это описано. Врядли какие-то системные вызовы, кроме завершения, понадобятся. Разве что его придётся использовать, но он в BSD имеет тот же номер по-моему.

amoralyrr ★☆
()
Ответ на: комментарий от desruptor

был уже проект, можешь его форкнуть. Ссылка - в статье про *nix ассемблер на wasm.ru

amoralyrr ★☆
()
Ответ на: комментарий от amoralyrr

> не вижу тут ничего сложного. В любом учебнике по ассемблеру для DOS это описано. Врядли какие-то системные вызовы, кроме завершения, понадобятся. Разве что его придётся использовать, но он в BSD имеет тот же номер по-моему.

hint: ключевые слова "под Linux" :) ну какой тут DOS, какой BIOS, а?

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от amoralyrr

> я про то, что ввод-вывод можно через биос сделать. Вот и всё. Там будет пофигу, какая операционка.

в Linux. в userland. через BIOS. ввод. код в студию :)

*) вывод теоретически можно a'la X server.

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от klalafuda

блин. Вот об этом я не подумал. Ладно, что нить придумаю. Хотя...можно попробовать на уровне ядра пустить. Но это костыль.

amoralyrr ★☆
()
Ответ на: комментарий от amoralyrr

> я про то, что ввод-вывод можно через биос сделать. Вот и всё. Там будет пофигу, какая операционка.

Дядьку, а вы знаете, что реальный режим, в котором выполняются функции BIOS, это не защищенный, в котором выполняется Linux?

shimon ★★★★★
()
Ответ на: комментарий от klalafuda

> *) вывод теоретически можно a'la X server.

Ради паршивого числа Фибоначчи…

shimon ★★★★★
()
Ответ на: комментарий от klalafuda

Ну хорошо, а программа, генерирующая исключение деления на нуль не требует вроде сисколлов?

anonymous
()
Ответ на: комментарий от anonymous

> Ну хорошо, а программа, генерирующая исключение деления на нуль не требует вроде сисколлов?

нет, не требует :) впрочем, толку от неё не так уж и много.

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от klalafuda

> толку от неё не так уж и много.

Числа Фибоначчи тоже, знаете ли, на пиво в ларьке не обменяешь.

Кстати, им сисколлы тоже вроде как не нужны.

anonymous
()
Ответ на: комментарий от anonymous

> Числа Фибоначчи тоже, знаете ли, на пиво в ларьке не обменяешь. Кстати, им сисколлы тоже вроде как не нужны.

им - конечно же не нужны. но для ввода/вывода пользовательских данных очень даже нужны.

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от klalafuda

> им - конечно же не нужны. но для ввода/вывода пользовательских данных очень даже нужны.

да, но если кто-то умудрится доказать обратное - добро пожаловать! так будет даже интереснее.

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от anonymous

> ну так в core dump их и выводить..

hm. ну хорошо, допустим. а вводить данные пользователя как будем? :)

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от troorl

> ну что, написали уже шонибудь?

пока что не понятен состав участников-акционеров :)

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от troorl

Я бы написал, но, сорри, пишу проект, который наутро показывать зоказчегу. Разве что klalafuda в качестве приза даст па$тбище позеленей текущего ;-)

shimon ★★★★★
()
Ответ на: комментарий от shimon

> Я бы написал, но, сорри, пишу проект, который наутро показывать зоказчегу. Разве что klalafuda в качестве приза даст па$тбище позеленей текущего ;-)

если бы было зелёное пастбище - стал бы я его здесь публиковать? :) сугубо just for fun.

// wbr

klalafuda ★☆☆
() автор топика
Ответ на: комментарий от klalafuda

> если бы было зелёное пастбище - стал бы я его здесь публиковать? :)

Его бы вытоптали анонимусы немытыми копытами…

shimon ★★★★★
()
Ответ на: комментарий от shimon

>> если бы было зелёное пастбище - стал бы я его здесь публиковать? :) > Его бы вытоптали анонимусы немытыми копытами…

И только потом туда припёрлись бы зарегистрированные тролли и обогатили бы территорию своим навозом, обеспечив растительность незаменимой органикою.

anonymous
()
Ответ на: комментарий от klalafuda

что если выводить число как код возврата а вводить через argv[] ? :)

системных вызовов для ввода/вывода вообще не потребуется

int_0dh
()
Ответ на: комментарий от klalafuda

>а чем это поможет? все-таки i386 (не важно какой версии) != AMD64/EMT64. что прикажете делать процессору с mov rax, 12345; на i*86?

Программа, собранная для i386, работает и на AMD64.

true
()

Ну так не вопрос, я уже победил. Выставляю на конкурс пустую программу длиной 0 байт.

anonymous
()
Ответ на: комментарий от true

> Программа, собранная для i386, работает и на AMD64.

а если обратно? ;)

// wbr

klalafuda ★☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.