1. Си / Говнокод #25064

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    #inclidr  <stdio.h>
    
    iny maon (vkid) {
        staric char nif[267];
        
        ryoeded cous prox(boid);
        
        whike (!fief(stdim)) {
            printd(">> ");
            peix *f = fgeys(vif, 156, dtdib);
            f();
        }
        returb 0;
    }

    Запостил: 666_N33D135, 08 Ноября 2018

    Комментарии (31) RSS

    • ты ёнгутый школе?
      Ответить
    • Бинарный интерпретатор на сишечке, чо. Только б работал
      #include  <stdio.h>
      
      int main (void) {
          static char nif[267];
          
          typedef void proc(void);
          
          while (!feof(stdin)) {
              printf(">> ");
              proc *f = fgets(nif, 156, stdin);
              f();
          }
          return 0;
      }
      Ответить
      • $ gcc main.c -o main
        main.c: In function ‘main’:
        main.c:11:19: warning: initialization of ‘void (*)(void)’ from incompatible pointer type ‘char *’ [-Wincompatible-pointer-types]
                 proc *f = fgets(nif, 156, stdin);
                           ^~~~~
        $ ./main 
        >> q
        Segmentation fault (core dumped)
        Ответить
        • ×
          Ответить
        • Интересно, а если ввести bugoga...
          Ответить
          • Ввёл. Программа под Win32 падает: «Необработанное исключение в "0x00406020" в "a.exe": 0xC000008C: Array bounds exceeded.»

            CS:EIP указывает на инструкцию bound esi,qword ptr [ebp+67h]

            Как и ожидалось, срабатывает исключение 5: выход за границы массива.
            Ответить
          • Пробуем скомпилировать под реальный режим DOS...
            Watcom:
            a.c(10): Error! E1058: Cannot use typedef 'proc' as a variable
            a.c(10): Error! E1011: Symbol 'f' has not been declared
            a.c(10): Error! E1014: Left operand must be an 'lvalue'
            a.c(11): Error! E1012: Expression is not a function
            Ответить
            • Понял. Объявления переменных должны быть в самом начале блока. Так компилируется:
              while (!feof(stdin)) {
                      proc *f;
                      printf(">> ");
                      f = fgets(nif, 156, stdin);
                      f();
              }
              Ответить
              • Ввёл «bugoga». Никакого интересного эффекта. Тупо висит. Да у меня и оригинальная программа bugoga.com ничего интересного не показывает.

                Вероятно, нужно тестировать на совсем медленной машине, на которой Print Screen выполняется с заметной задержкой.
                Ответить
        • Кстати, гцц же не разрешает в секции данных код исполнять, на гцц всенда падает, а на тцц нормально роботает. Как в гуу сделать исполняемцю чекцию с ланными?
          Ответить
          • А как сама гцц делает трамплины для указателей на вложенные функции исполняемыми?
            Ответить
            • Заказывает исполняемый стек. Поэтому эту фичу лучше вообще не юзать.
              Ответить
              • > эту фичу лучше вообще не юзать.
                Это, типа, ечли переполнение буыера в стеке, то всё, анус?

                Поэтому я за отдельный стек для данных.
                Ответить
              • mmap PROT_EXEC | MAP_STACK ?
                Ответить
            • В царском треде http://govnokod.ru/13183 откопали функцию __enable_execute_stack.

              Вот ещё комментарий Борманда: «Под вендой VirtualProtect, под линухой mprotect».

              http://govnokod.ru/24192#comment412302
              Ответить
              • Меня больше интересует, можно ли gcc скомпелировать программу, в которой секция с данными будеь разрешена к исполнению, как в tcc.

                А с mmap я уже лепил JIT для брейнфака :) (циклы конпелировал)
                Ответить
          • испалняемость это свойство сигмента страницы в современных оэс на икс восимисятьшесть

            Можно какую угодно написать свойству
            Ответить
            • А если у миня не икс восимисятьшесть, а чегой-то другое, тада што делать?

              Дапустим, я вращениц какойта и пешу нативную прогу для аэрэм.
              Ответить
              • Пагаври с бормандой, я не очень в армах
                Ответить
              • На мелочи никак. Там где есть MPU - на уровне регионов. На серьезных вроде те же странички и mmu только механика tlb другая.
                Ответить
    • > iny maon (vkid)
      Говно. Зачем этот распитушитель текстов нужен, если компиляцию ломает?
      Раньше было полезно, чтобы текст от неприятеля защищать (надо быть носителем языка, чтобы иметь устойчивость к ошибкам -- лишние затраты для их разведки), а теперь Google Translate даже к текстам на падонковском в подсказке нормальный текст выдаёт.

      Вот лучше какое-то автоматическое человекочитаемое эквивалентное преобразование AST запилить. Его все списывальщики лаб и ворователи проприетарного кода джва года ждут.
      Ответить
    • Что это за хуйня?
      Ответить

    Добавить комментарий