1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

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

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

Метки:
  1. 2Hard2Forget

    2Hard2Forget Member

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

    Rel Well-Known Member

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

    2Hard2Forget Member

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

    Rel Well-Known Member

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

    M0rg0t Member

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

    Rel Well-Known Member

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

    M0rg0t Member

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

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

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

    q2e74 Active Member

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

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

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

    Bedolaga Member

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

    Rel Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 дек 2008
    Сообщения:
    2.290
    он хочет уделать всех на обфускейтед си контест наверное))...
    --- Сообщение объединено, 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 Синоби даоса Команда форума

    Публикаций:
    1
    Регистрация:
    11 июн 2004
    Сообщения:
    3.146
    Адрес:
    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
    Сообщения:
    40
    Препод подсказал, что можно использовать таблицу импортов, вот только я не понимаю, как ей пользоваться, а компилятор - любой, хоть GCC, хоть от майкрософт. Алфавит, ну латиница. Я искал на ioccc , но не нашел примеров без #define
     
  14. TrashGen

    TrashGen ТрещГен

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

    ormoulu Member

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

    f13nd Active Member

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

    ormoulu Member

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

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

    2Hard2Forget Member

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

    ormoulu Member

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

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

    f13nd Active Member

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

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