1. Список говнокодов пользователя j123123

    Всего: 335

  2. C++ / Говнокод #20947

    +2302

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    http://govnokod.ru/20924
    
    Запрашиваемая страница не найдена!
    
    Возможно, её и не было никогда

    http://dump.bitcheese.net/files/pimarut/%D0%93%D0%BE%D0%B2%D0%BD%D0%BE%D0%BA%D0%BE%D0%B4_%2320924_%E2%80%94_C___%E2%80%94_%D0%93%D0%BE%D0%B2%D0%BD%D0%BE%D0%BA%D0%BE%D0%B4.%D1%80%D1%83.html
    но бекап я сделал, так что хуй вам. Я требую продолжения банкета.

    j123123, 24 Августа 2016

    Комментарии (60)
  3. Куча / Говнокод #20482

    +7

    1. 1
    http://dump.bitcheese.net/images/aditoso/sc.png

    Умножение двух трехбитных чисел с применением https://ru.wikipedia.org/wiki/Дешифратор

    Для сравнения - вот умножение через сумматоры https://i.imgur.com/9JCy2D2.png

    j123123, 06 Августа 2016

    Комментарии (22)
  4. Куча / Говнокод #20480

    +7

    1. 1
    https://twitter.com/neuromzan

    Нейросеть научилась писать твиты за Рамзана Кадырова https://nplus1.ru/news/2016/08/05/neurokad
    Вореции

    j123123, 06 Августа 2016

    Комментарии (2)
  5. Assembler / Говнокод #20423

    −715

    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
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    return instruction emitted twice with branch target inbetween
    
    function
    
    unsigned int fact( unsigned int n) { return n < 1 ? 1 : n*fact(n-1); }
    
    produces
    
    fact:
    .LFB0:
            .cfi_startproc
            testl   %edi, %edi
            movl    $1, %eax
            je      .L4
            .p2align 4,,10
            .p2align 3
    .L3:
            imull   %edi, %eax
            subl    $1, %edi
            jne     .L3
            rep ret # <-- this instruction can be removed
    .L4:
            rep ret
            .cfi_endproc
    .LFE0:
            .size   fact, .-fact
            .section        .text.unlikely

    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71923 даже факториал не могут скомпилировать нормально

    j123123, 25 Июля 2016

    Комментарии (56)
  6. Си / Говнокод #20418

    −47

    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
    15. 15
    16. 16
    17. 17
    Имеем приблизительно такой код
    
    #define XXX(n) ar[n]=s._field_##n;
    XXX(01);
    XXX(02);
    XXX(03);
    XXX(04);
    XXX(05);
    XXX(06);
    XXX(07);
    XXX(08);
    
    Естесвенно при при компиляции получаем ошибку, т.к. 08 это неправильная восмеричная константа. Обойти можно так
    
    #define XXX(n) ar[1##n-100]=s._field_##n;
    
    Но как-то это некрасиво. Может есть более красивый подход?

    https://www.linux.org.ru/forum/development/12607523

    j123123, 24 Июля 2016

    Комментарии (45)
  7. Си / Говнокод #20402

    −50

    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
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    Timer_Overflow_Interrupt(void)
    {
    switch(TMR_State)			// Обработчик прерывания по переполнению
    	{
    	case 0:	
    		{ 
    		Clr_Pin();		// Вывод в 0
    		TCNT = 255-100; 	// Задержка в 100 (до переполнения)
    		TMR_State = 1; 		// Следующая стадия 1
    		Break;			// Выход
    		}
     
    	case 1:	
    		{ 
    		Set_Pin();
    		TCNT = 255-1; 
    		TMR_State = 2; 
    		Break;
    		}
     
    	case 2:	
    		{ 
    		Clr_Pin();
    		TCNT = 255-5; 
    		TMR_State = 3; 
    		Break;
    		}
     
    	case 3:	
    		{ 
    		Set_Pin();
    		TCNT = 255-2; 
    		TMR_State = 4; 
    		Break;
    		}
     
    	case 4:	
    		{ 
    		Clr_Pin();
    		TCNT = 255-3; 
    		TMR_State = 5; 
    		Break;
    		}
     
    	case 5:	
    		{ 
    		Set_Pin();
    		TCNT = 255-4; 
    		TMR_State = 6; 
    		Break;
    		}
     
    	case 6:
    		{ 
    		Clr_Pin();
    		Timer_OFF(); 		// Выключаем таймер. Работа окончена
    		TMR_State = 0; 		// Обнуляем состояние
    		Break;			
    		}
     
    	default: 	break;		
    	}
    }

    http://easyelectronics.ru/avr-uchebnyj-kurs-konechnyj-avtomat.html

    А не лучше ли сделать массив указателей на функции, каждая из которых будет соответствовать case-у, и пусть там оно вызывает из массива фукнцию под номером TMR_State? Притом вот эту хню TMR_State = 1; TMR_State = 2; TMR_State = 3; которая дублируется во всех этих case-ах, ее ж можно хуйнуть всего один раз, типа TMR_State = (TMR_state+1)%7. Хотя для AVR контроллеров это скорее всего будет дорогая операция, так что можно хуйнуть TMR_State = TMR_state == 7 ? 0 : TMR_state+1;

    j123123, 20 Июля 2016

    Комментарии (52)
  8. Си / Говнокод #20350

    −47

    1. 1
    while((*dst++ = *src++));

    двойные скобки, чтоб заткнуть ворнинг

    warning: suggest parentheses around assignment used as truth value [-Wparentheses]

    j123123, 08 Июля 2016

    Комментарии (23)
  9. Си / Говнокод #20309

    −46

    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
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    #include <stdio.h>
    #include <inttypes.h>
    
    #define REORDER3(b1,b2,b3,a1,a2,a3) do {uint32_t b1_tmp = a1; uint32_t b2_tmp = a2; b3 = a3; b1 = b1_tmp; b2 = b2_tmp;} while (0)
     
    void uintprint3(uint32_t *a)
    {
      printf("%u %u %u\n", a[0], a[1], a[2]);
    }
    
    void sort3(uint32_t a[3] )
    {
      if (a[0] > a[1])
      {
        if (a[1] > a[2])
        {
          REORDER3 (
            a[0], a[1], a[2],
            a[2], a[1], a[0]);
          return;
        }
        else
        {
          if (a[0] > a[2])
          {
            REORDER3 (
              a[0], a[1], a[2],
              a[1], a[2], a[0]);
            return;
          }
          else
          {
            REORDER3 (
              a[0], a[1], a[2],
              a[1], a[0], a[2]);
            return;
          }
        }
      }
      else
      {
        if (a[1] <= a[2])
        {
          return; //NO REORDER
        }
        else
        {
          if (a[0] <= a[2])
          {
            REORDER3 (
              a[0], a[1], a[2],
              a[0], a[2], a[1] );
            return;
          }
          else
          {
            REORDER3 (
              a[0], a[1], a[2],
              a[2], a[0], a[1] );
            return;
          }
        }
      }
    }
     
    int main(void)
    {
      uint32_t a[] = {0, 1, 2};
      uint32_t b[] = {0, 2, 1};
      uint32_t c[] = {1, 2, 0};
      uint32_t d[] = {1, 0, 2};
      uint32_t e[] = {2, 0, 1};
      uint32_t f[] = {2, 1, 0};
      sort3(a); sort3(b); sort3(c); sort3(d); sort3(e); sort3(f);
     
      uintprint3(a);
      uintprint3(b);
      uintprint3(c);
      uintprint3(d);
      uintprint3(e);
      uintprint3(f);
      return 0;
    }

    Вот как сортировать надо. А то всякие жабаскриптики http://govnokod.ru/20308 непонятные.

    Это говно кстати можно автосгенерировать для произвольной длины, но мне что-то западло этим заниматься

    j123123, 01 Июля 2016

    Комментарии (10)
  10. Си / Говнокод #20289

    −47

    1. 1
    http://ache.vniz.net/demos.html

    > Cвоеобразный программисткий подвиг совершил Дима Бурков. В то время начали появляться первые PC. Unix на них выглядел неубедительно. Linux еще не появился, зато повился Venix. Хачить его было невозможно - не было исходных текстов ядра. Дима Бурков реассемблировал ядро, потом писал программы на Си, которые давали тот же текст ассемблера - так появились тексты ядра на Си ... работа не для слабонервных.

    А вот интересно, можно ли сделать декомпилятор таким способом? Например, если известна точная версия GCC и флаги компиляции, которые использовались (ну и естественно исходники компилятора должны быть в наличии) то перебирать с эвристиками некий Си-код, пользуясь дизасм-листингом для подсказки и сравнения. Какой подход использует Hex-Rays например? Вряд ли они исходники GCC ковыряли

    j123123, 28 Июня 2016

    Комментарии (12)
  11. Си / Говнокод #20245

    −47

    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
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    //                   ПРЕОБРАЗОВАНИЕ КОДА И КОНЕЧНЫЕ АВТОМАТЫ
    //                   ---------------------------------------
    //               (проектируем очень хуево дизассемблируемый код)
    
    int T[256] =
    {
      4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
      //                      , -      0 1 2 3 4 5 6 7 8 9
      0,0,0,0,0,0,0,0,0,0,0,0,2,3,0,0, 1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
    };
    
    for(;;)
    {
      int A;
      switch( S )
      {
        case 0:
                switch( T[*c] )
                {
                  case 1:  { S=1; A=1; }; break;
                  default: { S=5; A=2; }; break;
                }
                break;
        case 1:
                switch( T[*c] )
                {
                  case 2:  { S=0; A=2; }; break;
                  case 1:  { S=1; A=3; }; break;
                  case 3:  { S=2;      }; break;
                  case 4:  { S=4; A=2; }; break;
                  case 0:  { S=5;      }; break;
                }
                break;
        case 2:
                switch( T[*c] )
                {
                  case 1:  { S=3; A=4; }; break;
                  default: { S=5;      }; break;
                }
                break;
        case 3:
                switch( T[*c] )
                {
                  case 2:  { S=0; A=5; }; break;
                  case 1:  { S=3; A=6; }; break;
                  case 4:  { S=4; A=5; }; break;
                  default: { S=5;      }; break;
                }
                break;
        case 4:
                A = 7;
                break;
        case 5:
                A = 8;
                break;
      }
      switch( A )
      {
        case 1: { l=*c-'0';      c++; }; break;
        case 2: { store(l,l);    c++; }; break;
        case 3: { l=l*10+*c-'0'; c++; }; break;
        case 4: { h=*c-'0';      c++; }; break;
        case 5: { store(l,h);    c++; }; break;
        case 6: { h=h*10+*c-'0'; c++; }; break;
        case 7: { exit();             }; break;
        case 8: { error();            }; break;
      }
    }

    http://z0mbie.daemonlab.org/automaton.txt отсюда

    Мне это напомнило вот эту вот ебанутейшую хуиту https://src.chromium.org/viewvc/native_client/trunk/src/native_client/src/trusted/validator_ragel/gen/validator_x86_64.c из хрома, которая делает валидацию опкодов из-под NaCl, его через какой-то ragel делают

    j123123, 22 Июня 2016

    Комментарии (15)