Как написать программу на Си, не используя символов алфавита?

Тема в разделе "WASM.BEGINNERS", создана пользователем 2Hard2Forget, 9 окт 2019.

Метки:
  1. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    Я хочу написать программу на Си,которая вычисляет числа Фибоначчи ,однако нельзя использовать символы алфавита. То есть сделать рекурсивную программу, где не могут использоваться for, int, while
    Как такое можно сделать? Оставил метку с++, хотя надо на Си.
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    #define _1 if
    #define _2 for
    #define _3 while
    // и тд
     
  3. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    После символа шарп(#) идут буквы, их тоже нельзя
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    тогда никак...
     
  5. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Пиши сразу в машинных кодах, там букв нет, одни цифры.
    Что за идиотская задача? Еще без циклов я понимаю, без букв как? Нереально никак.
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    на хексе тоже будут буквы, типа 0xFF... я думаю, что на лиспе можно написать без букв, но на таком, где можно лямбду объявить через .\ , да и то не факт...
    --- Сообщение объединено, 9 окт 2019 ---
    может на хаскелле можно что-то типа написать, но не знаю, если хаскелл переваривает идентификаторы, которые начинаются с подчеркивания и содержат цифры после него:
    _1 0 = 0
    _1 1 = 1
    _1 _2 = (_1 (_2 - 1)) + (_1 (_2 - 2))
     
  7. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Rel, тогда уж на перл, там есть все эти приколы с $_ $ (как постили однострочник, что удаляет данные).

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

    Кстати, я когда-то видел книжку, "пишем свой лисп на языке Си". Так тогда не изучил ее.
     
  8. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    988
    Целый коан "хлопок одной лодони". Как пользуясь лопатой докопать с красной площади до марса (красной планеты)?
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.708
    q2e74,
    а главное, в чём скрытый смысл? к чему такие ограничения?
     
  10. Bedolaga

    Bedolaga Member

    Публикаций:
    0
    Регистрация:
    10 июл 2019
    Сообщения:
    131
    Постановкой задачи препод тонко намекает на взятку? :blush2:
     
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    он хочет уделать всех на обфускейтед си контест наверное))...
    --- Сообщение объединено, 10 окт 2019 ---
    между тем, я подтвердил свою теорию про хаскелл... файл test.hs:
    Код (Text):
    1.  
    2. _1 0 = 1
    3. _1 1 = 1
    4. _1 _2 = (_1 (_2 - 1)) + (_1 (_2 - 2))
    5.  
    запускаем ghci и загружаем его на исполнение:
    Код (Text):
    1.  
    2. $ ghci
    3. GHCi, version 8.6.5: http://www.haskell.org/ghc/  :? for help
    4. Prelude> :load test
    5. [1 of 1] Compiling Main  ( test.hs, interpreted )
    6. Ok, one module loaded.
    7. *Main> _1 4
    8. 5
    9. *Main> _1 6
    10. 13
    11. *Main> _1 7
    12. 21
    13.  
    --- Сообщение объединено, 10 окт 2019 ---
    так что хаскелл вашу сишечку уделал в этом отношении))...
     
  12. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    какого именно алфавита?
    какой именно компилятор?

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

    Рекурсивная это типа :

    Код (Text):
    1. int fibonacci(int N)
    2. {
    3.   if (N == 1 || N == 2)
    4.     return 1;
    5.   return fibonacci(N - 1) + fibonacci(N - 2);
    6. }
    ну тут нету ни while, ни for, int можно заменять на long
     
  13. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    Препод подсказал, что можно использовать таблицу импортов, вот только я не понимаю, как ей пользоваться, а компилятор - любой, хоть GCC, хоть от майкрософт. Алфавит, ну латиница. Я искал на ioccc , но не нашел примеров без #define
     
  14. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.173
    Адрес:
    подполье
    Ябы даже скозал: как, не пользуясь лопатой, докопатьца до истены (где-то рядом)?
     
  15. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Из командной строки виндовс раньше можно было в десятичной системе набирать, сейчас не знаю. Можно сразу и фибоначчи, и таблицу импортов и что там еще ТС нужно :lol:
    --- Сообщение объединено, 10 окт 2019 ---
    Вообще постановка задачи конечно странная. Какая таблица импорта подразумевается, PE/ELF? Преподаватель хочет импорт по ординалам? Какой предмет хоть?
     
  16. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    Если речь только о содержимом main(), можно вон интерпретатор брейнфака к себе в исходник выписать и получится фибоначчи без алфавита.
     
  17. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Код (C):
    1. _ = 8;
    2. __ = 12;
    3.  
    4. ___ ()
    5. {
    6.  
    7. }
    C-компиль сожрал нормально. Пишите что вам нужно, не забудьте расширение файла *.c (или как там указывается C в gcc). Укажите ___ точкой входа приложения вместо main.

    PS: Только не говорите, что опции компиля нужно тоже задать без букв алфавита :crazy:
     
  18. 2Hard2Forget

    2Hard2Forget Member

    Публикаций:
    0
    Регистрация:
    27 авг 2018
    Сообщения:
    86
    Опции компилятора сказали оставить по дефолту
    --- Сообщение объединено, 10 окт 2019 ---
    Я не шарю за таблицу импортов, а какая поможет в этом случае? Я понимаю, что от всяких 0xFF можно избавится восьмеричной системой, main можно оставить, если переменную объявить как просто а , то она вроде будет int a, но что делать с if, while и printf( вот вроде на printf и нужна таблица импорта)
     
  19. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Вот это поворот...

    Кто ж его знает вашего препода, какую таблицу он подразумевал?
    В теории можно символьные строки собрать из числовых представлений (кто-нибудь помнит, как?)
    Там нет еще хитрых условий типа оно должно быть переносимо между ОС и т.п. ?
     
  20. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    1.953
    Если речь о возможности подключить шеллкод в восьмеричной системе и исполнить, то проблема импортов не проблема вообще. Из PEB берется хендл kernel32, по заголовкам можно выйти на его экспорт, в нем найти GetProcAddress, с которым можно через LoadLibraryA и user32.dll подтянуть и получить адрес wsprintfA.

    ЗЫ: тьфу, вывод в консоль GetStdHandle/WriteFile :mda:
     
    Последнее редактирование: 10 окт 2019