The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Объявлены победители 28 конкурса по написанию запутанного кода на языке Си"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Объявлены победители 28 конкурса по написанию запутанного кода на языке Си"  +/
Сообщение от opennews (ok), 03-Авг-25, 23:19 
Опубликованы исходные тексты работ, победивших в двадцать восьмом конкурсе IOCCC (International Obfuscated C Code Contest), участникам которого предлагалось подготовить наиболее запутанный и трудноразбираемый код на языке Си. 28 конкурс проведён после  четырёхлетнего перерыва и примечателен  разрешением использовать кодировку UTF-8 в коде...

Подробнее: https://www.opennet.me/opennews/art.shtml?num=63668

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +2 +/
Сообщение от Карлос Сношайтилис (ok), 03-Авг-25, 23:19 
Волчок прекрасен!
Ответить | Правка | Наверх | Cообщить модератору

31. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +1 +/
Сообщение от jura12 (ok), 04-Авг-25, 08:17 
а ты пробовал компилить?
Ответить | Правка | Наверх | Cообщить модератору

3. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +5 +/
Сообщение от Аноним Анонимович Анонимов (?), 03-Авг-25, 23:21 
Аплодисменты участникам. Каждый раз удивляют победители.
Ответить | Правка | Наверх | Cообщить модератору

12. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +4 +/
Сообщение от Аноним (12), 04-Авг-25, 00:31 
Тут кстати документалка, как авторы готовили свои проекты:
https://www.youtube.com/watch?v=dQw4w9WgXcQ
Ответить | Правка | Наверх | Cообщить модератору

7. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +3 +/
Сообщение от Голдер и Рита (?), 03-Авг-25, 23:58 
Создавать эффективные приложения с небольшим количеством кода — вот причина, по которой я обожаю язык Си.
Ответить | Правка | Наверх | Cообщить модератору

13. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +1 +/
Сообщение от Аноним (-), 04-Авг-25, 00:37 
Поддержка кода и исправление бегов в понятие "эффективные приложения" входит))?
Или как наовнякали, так пусть работает.
Ну пока за пределы буфера не выйдет.
Ответить | Правка | Наверх | Cообщить модератору

27. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Аноним (27), 04-Авг-25, 08:05 
> Поддержка кода и исправление бегов в понятие "эффективные приложения" входит))?

Нет, конечно. Туда не входит даже проверки данных/параметров на корректность, ибо эффективность сразу улетучивается.

А зачем все это нужно, если у сишочника в случае чего есть универсальная отмаза "и чо, я этот хэллоуворлд писал в одно лицо для самого себя, и в моем конкретном случае все работает111"? (Если что, это был реальный аргумент от одного местного эксперта).

Ответить | Правка | Наверх | Cообщить модератору

37. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Аноним (37), 04-Авг-25, 09:22 
> Нет, конечно. Туда не входит даже проверки данных/параметров на корректность, ибо эффективность сразу улетучивается

В своем последнем проекте я тоже пришел к данному решению. Проверка производится до вызова функций, реализующих алгоритм. Функции считают, что входные данные и параметры абсолютно корректны.
Если Вы посмотрите на реализации математических алгоритмов во многих математических библиотеках, там это не так. И это действительно снижает эффективность, увеличивает объем кода и дополнительно грузит программиста, отвлекая от реализации алгоритмов.

Ответить | Правка | Наверх | Cообщить модератору

39. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Аноним (39), 04-Авг-25, 10:13 
> снижает эффективность

Если предположить, что наша функция всегда будет складывать 2+2, как по вашему должна выглядеть эффективная функция (алгоритм) сложения - всегда возвращающая 4 (return 4;)? И эту фукцию разве корректно формально называть "эффективной функцией сложения двух чисел"?

Ответить | Правка | Наверх | Cообщить модератору

41. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Cyd (?), 04-Авг-25, 10:54 
int getRandomNumber() {
    return 4; // chosen by fair dice roll
                    //guaranteed to be random
}
Ответить | Правка | Наверх | Cообщить модератору

45. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Аноним (39), 04-Авг-25, 11:21 
ну мы же рассуждаем про "эффективность" в контексте "избавлений от проверок на допустимые значения ВХОДНЫХ параметров", а в вашем "классическом" примере нет входных параметров.
Ответить | Правка | Наверх | Cообщить модератору

59. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Аноним (59), 04-Авг-25, 18:17 
Проверка параметров это дикие тормоза, совершенно бесполезные, не решающие никаких задач, просто изгадить код. Такое проходит только в корпоративном гвнокоде, где на производительность плевать "докупят еще серверов", но для программ пользователя такое свинство недопустимо.
Ответить | Правка | К родителю #27 | Наверх | Cообщить модератору

28. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Аноним (27), 04-Авг-25, 08:09 
> с небольшим количеством код

Лол, а как только у нас что-то больше хэллоуврлда, то внезапно появляются самописные строки, контейнеры и всякая банальшина типа split_string() (естественно, без тестов и проверок).

Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

38. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +3 +/
Сообщение от Аноним (37), 04-Авг-25, 09:24 
Вам показывают проекты из серии "Программисты шутят", а Вы относитесь к ним слишком серьезно. Реальные проекты на C выглядят иначе.
Ответить | Правка | Наверх | Cообщить модератору

43. "Объявлены победители 28 конкурса по написанию запутанного ко..."  –2 +/
Сообщение от Фнон (-), 04-Авг-25, 11:14 
> Вам показывают проекты из серии "Программисты шутят",

Ты хотел сказть маются уетой?

> а Вы относитесь к ним слишком серьезно.

Эх(((, к вам когда-то на собеседование приходили всякие олимпиадники?

> Реальные проекты на C выглядят иначе.

Теорема г-на Эскобара говорит противоположное))
Думаете такой фигни в проде не будет?
Типа неявных манипуляций юникодом или "код с огромным числом операторов goto"?

Ответить | Правка | Наверх | Cообщить модератору

32. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от jura12 (ok), 04-Авг-25, 08:18 
о чем вы? ассемблер не пробовали? там ваша эффективность будет еще выше.
Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

36. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Аноним (37), 04-Авг-25, 09:16 
Я пробовал. Действительно выше.
Ответить | Правка | Наверх | Cообщить модератору

8. Скрыто модератором  +/
Сообщение от Аноним (8), 04-Авг-25, 00:00 
Ответить | Правка | Наверх | Cообщить модератору

10. "Объявлены победители 28 конкурса по написанию запутанного ко..."  –2 +/
Сообщение от голос_из_леса (ok), 04-Авг-25, 00:08 
Как показывает опыт перла, такие конкурсы предвестники забвения.
Ответить | Правка | Наверх | Cообщить модератору

33. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +6 +/
Сообщение от EULA (?), 04-Авг-25, 08:19 
Уу. 41 год забывают, забывают и никак не могут забыть. Конкурс проводится с 1984 года. Большинство комментаторов ОпенНета еще не родились, когда конкурс проводился в первый раз. И похоже, что все отметившиеся на сегодня здесь, не доживут до того момента, когда конкурс будут проводить в последний раз.
Ответить | Правка | Наверх | Cообщить модератору

42. "Объявлены победители 28 конкурса по написанию запутанного ко..."  –4 +/
Сообщение от Аноним (-), 04-Авг-25, 10:57 
> Конкурс проводится с 1984 года.

В США чемпионат по метанию лепешек навоза проводится с 1970х (В РФ с 2010го вроде бы).
А соревнование по броскам йоркширским пудингом было еще в 1839 году, правда с перерывами.
И скорее всего переживет всех отметившихся сегодня.

Польза от сего конкурса примерно такая же как от вышеперечисленных.
Хотя... возможно метание навозом даже полезнее.

Ответить | Правка | Наверх | Cообщить модератору

46. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от EULA (?), 04-Авг-25, 11:22 
Грэйдон Хор тоже участвовал в конкурсе необычных и бесполезных вещей в IT. Победил. Теперь его проект некоторые люди считают панацеей от кривых рук в программировании.
Ответить | Правка | Наверх | Cообщить модератору

47. "Объявлены победители 28 конкурса по написанию запутанного ко..."  –2 +/
Сообщение от Аноним (-), 04-Авг-25, 11:30 
> Теперь его проект некоторые люди считают панацеей от кривых рук в программировании.

Проблема в том, что еще не родился сишник с прямыми руками.
Доказано 40+ годами написания сишных дыреней.

Ответить | Правка | Наверх | Cообщить модератору

49. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +1 +/
Сообщение от EULA (?), 04-Авг-25, 12:05 
Ну-да, ну-да.
В "безопасных" языках такие перлы учудили, что умудрились сделать дыры там, где в сишных аналогичных проектах их не было. Например CVE-2023-42456 и CVE-2025-46718. Там еще и десяток других ошибок обработки строк и переменных окружения есть, позволяющее обойти ограничения /etc/sudoers, которых нет в оригинале. Три ошибки просто нельзя исправить из-за особенностей языка.
Ой! Это же кривые руки разработчика! Но в безопасном языке - это норма и не является проблемой языка, а в "небезопасном" - это проблема языка.
Ответить | Правка | Наверх | Cообщить модератору

50. "Объявлены победители 28 конкурса по написанию запутанного ко..."  –1 +/
Сообщение от Аноним (-), 04-Авг-25, 12:24 
А ничего что это логические ошибки? И еще не придумано способа избегать логических ошибок, кроме формальной верификации. Как только придумают, я буду первым кто будет топить за закапывания раста.

Зато в дыpяшке можно нажать 28 раз Back Space и обойти ввод пароля (opennet.ru/opennews/art.shtml?num=43536) Какой еще йазыг позволяет такой проделать!

Раз ты вспомнил sudo - вот логические  CVE-2021-23240, CVE-2019-19234.
Но в комплекте идут CVE-2021-23239 с race condition, CVE-2021-3156 с buffer overflow и прочие типикАл сишные баги.

Ответить | Правка | Наверх | Cообщить модератору

53. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +1 +/
Сообщение от EULA (?), 04-Авг-25, 13:29 
> А ничего что это логические ошибки?

А ничего, что при работе с памятью тоже логические ошибки?
Для C и C++ есть требования как работать с памятью. И требования эти есть с с 1978 года. И есть лица, которые нарушают стандарты работы с языком. То есть это логическая ошибка.

> И еще не придумано способа избегать логических ошибок, кроме формальной верификации

Давай тогда орать, что раст дырявый язык только потому, что и в нем при делении требуется верификация делителя на то, чтобы он был не нулем!

>  вот логические

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

>  с buffer overflow и прочие типикАл сишные баги.

Про которые еще 50 лет назад говорилось, как их не допускать.

Я еще раз спрашиваю: Почему отсутствие проверки деления на ноль в Rust - это логическая ошибка, а отсутствие проверки границ буфера - это ошибка языка?
Ничего, что с помощью таких фич можно делать успешные атаки на систему?

И да. Почему программа C при краше после вызова деления на ноль за собой чистить в ОЗУ, а в Rust не чистит? И не надо говорить, что libstdc так делает.

Ответить | Правка | Наверх | Cообщить модератору

54. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Аноним (-), 04-Авг-25, 13:48 
> А ничего, что при работе с памятью тоже логические ошибки?

Нет, это особое подмножество ошибок. Которые по какой-то "странной случайности" характерны именно для сишки. И которые продолжают делать с завидной регулярностью.
Раст позволяет избавиться от этого большого подмножества. Сишка - нет.

> И требования эти есть с с 1978 года.

Да ну)) Они обязательны к исполнению? Что, неужели нет??? Вот как бы и все.

Для надежности сделали misra c. Который кacтpиpовали настолько, что там даже динамического выделения памяти нет. Потому что проще запретить, чем чтобы сишники не накосячили.

>  И есть лица, которые нарушают стандарты работы с языком.

И эти лица - 99.9%+ сишников :)

> отсутствие проверки деления

выполнит произвольный код?
Или софтина гарантировано упадет с паникой (и заодно запишет в какой строке это произошло)?
Более того, в расте при попытке писать за границы массива тоже будет паника.
А в сишечке... а что угодно может быть. Начиная от порчи данных до дарения рута.

> Ничего, что с помощью таких фич можно делать успешные атаки на систему

Ну так мы регулярно наблюдаем успешные атаки с переполнением буфера в сишечке.
К чему вы это пишете?

Ответить | Правка | Наверх | Cообщить модератору

15. Скрыто модератором  +1 +/
Сообщение от Аноним (-), 04-Авг-25, 00:40 
Ответить | Правка | Наверх | Cообщить модератору

16. Скрыто модератором  +/
Сообщение от Аноним (16), 04-Авг-25, 02:08 
Ответить | Правка | Наверх | Cообщить модератору

21. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +1 +/
Сообщение от Аноним (21), 04-Авг-25, 06:45 
Беллард хоть что-нибудь взял?
Ответить | Правка | Наверх | Cообщить модератору

25. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Аноним (25), 04-Авг-25, 07:22 
Если зайти по ссылке: https://www.ioccc.org/2024/kurdyukov3/ogvm.html
Написать в текстовом поле: doomp.bin
Нажать кнопку Start, то запустится Doom прямо в браузере.

Автор также бонусом добавил нативную JIT (быстрый JIT без оптимизаций) версию с поддержкой архитектур x86, x86_64, aarch64 и e2k.

Web версия тоже содержит JIT, только на JS, JS позволяет генерить и выполнять JS код во время выполнения.

> Утилита для удаления артефактов из JPEG-изображений

Это урезанная обфусцированная копия утилиты JPEG Quant Smooth (есть в некоторых дистрибутивах линукс как jpegqs).

Ответить | Правка | Наверх | Cообщить модератору

26. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от 1 (??), 04-Авг-25, 07:59 
> На первый взгляд программа возводит в квадрат числа от 1 до 10, но на деле показывается рецепт приготовления жареного лосося. Код 15 строк и содержит манипуляции с незаметными символами Unicode.

Объясните. Никакого рецепта по ссылке не вижу. Компилировал, выводит квадраты чисел.

Ответить | Правка | Наверх | Cообщить модератору

35. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +1 +/
Сообщение от Аноним (35), 04-Авг-25, 08:40 
Как компилировал?
Качай 2024_cable2.tar.bz2 и запускай

gcc prog.c
./a.out

Season salmon fillets with olive oil, lemon juice, garlic, salt, and pepper, then grill over medium heat for 4-6 minutes per side until flaky and cooked through.

$ cat prog.c
#include <stdio.h>

unsigned int    *salmon = U"󠁓󠁥󠁡󠁳󠁯󠁮󠀠󠁳󠁡󠁬   is very yummy";

#define  grill󠁁  ;while(putchar(*salmon++))
#undef   grill

#define 󠁁 grill󠁁
#undef   grill

int main() {󠁁 󠁁
  for (int i = 1; i <= 10; i++) {
    printf("%d * %d = %d\n", i, i, i*i);
  }
}

$ cat -A prog.c
#include <stdio.h>$
$
unsigned int    *salmon = U"M-sM- M-^A......^@M-^@is very yummy";$
$
#define  grillM-sM- M-^AM-^A  ;while(putchar(*salmon++))$
#undef   grill$
$
#define M-sM- M-^AM-^A grillM-sM- M-^AM-^A$
#undef   grill$
$
int main() {M-sM- M-^AM-^A M-sM- M-^AM-^A$
  for (int i = 1; i <= 10; i++) {$
    printf("%d * %d = %d\n", i, i, i*i);$
  }$
}$

Ответить | Правка | Наверх | Cообщить модератору

30. "Объявлены победители 28 конкурса по написанию запутанного ко..."  –1 +/
Сообщение от Аноним (30), 04-Авг-25, 08:15 
Так Си и так запутанный! Сколько новостей было что люди не справляются с буфером.
Ответить | Правка | Наверх | Cообщить модератору

52. Скрыто модератором  +/
Сообщение от Аноним (52), 04-Авг-25, 13:02 
Ответить | Правка | Наверх | Cообщить модератору

34. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +1 +/
Сообщение от jura12 (ok), 04-Авг-25, 08:19 
я боролся с багами в С++. оказалось что я забываю ставить звездочку или амперсанд.
Ответить | Правка | Наверх | Cообщить модератору

44. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Аноним (44), 04-Авг-25, 11:20 
о, в победителях числится автор fpdoom
Ответить | Правка | Наверх | Cообщить модератору

56. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Аноним (56), 04-Авг-25, 14:46 
Конкурсная работа с запуском Doom была написана в сентябре 2020-го, и потом опыт её создания помог в портировании Doom на телефон. Можно заметить, что у патча для ванильного Doom из конкурса и патча к Doom для FPDoom есть много общего.
Ответить | Правка | Наверх | Cообщить модератору

48. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от onanim (?), 04-Авг-25, 11:46 
вот вы бухтите о проблемах с памятью в Си, а иногда это не баг, а фича!

https://serverfault.com/questions/86968/dnsmasq-how-to-incre...

> You can actually bypass the 3600 second --min-cache-ttl check by exploiting an integer overflow bug in the dnsmasq C source code, without any need for recompiling. Here is a value which works:
>
> Via CLI: --min-cache-ttl=6442450943
>
> Via dnsmasq.conf: min-cache-ttl=6442450943

Ответить | Правка | Наверх | Cообщить модератору

57. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Аноним (57), 04-Авг-25, 17:03 
я так раньше routing cache в древних linux отключал
Ответить | Правка | Наверх | Cообщить модератору

51. Скрыто модератором  +/
Сообщение от Аноним (51), 04-Авг-25, 12:58 
Ответить | Правка | Наверх | Cообщить модератору

55. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Аноним (16), 04-Авг-25, 14:33 
Некоторые работы странные: требуют тонны бинарей байткодов, подготовленных другими самописными утилитами. Так можно что угодно сложное сделать...
Ответить | Правка | Наверх | Cообщить модератору

60. Скрыто модератором  +/
Сообщение от Аноним (-), 04-Авг-25, 18:18 
Ответить | Правка | Наверх | Cообщить модератору

58. Скрыто модератором  +/
Сообщение от Аноним (-), 04-Авг-25, 18:17 
Ответить | Правка | Наверх | Cообщить модератору

61. "Объявлены победители 28 конкурса по написанию запутанного ко..."  +/
Сообщение от Ваганыч (?), 04-Авг-25, 18:58 
В конкурсе по написанию понятного кода на языке Си победить никто не смог…
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру