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

    Всего: 338

  2. Си / Говнокод #19625

    −48

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    uint8_t n1[][2] = {{1,2}, {3,4}, {5,6}, {99,88}};
        uint8_t n2[][2] = {{7,8}, {9,10}, {11,12}, {99,88}};
        uint8_t n3[][2] = {{13,14}, {15,16}, {17,18}, {99,88}};
        
        // Надо сделать массив из указателей на двумерные массивы    
        uint8_t (*ars[3])[2] = { n1, n2, n3}; // полная херня, нечитаемо
        
        typeof( typeof(uint8_t [2]) *) ars2[3] = {n1, n2, n3}; // можно так
        
        typeof( typeof(uint8_t [2]) *[3]) ars3 = {n1, n2, n3}; // можно еще так
        
        typeof(uint8_t (*)[2]) ars4[3] = {n1, n2, n3}; // во, теперь заебись!

    Почему в Си так по-дебильному надо объявлять всякие массивы указателей на двумерные массивы и тому подобную херню? Через typeof получается куда понятней

    j123123, 14 Марта 2016

    Комментарии (66)
  3. Си / Говнокод #19491

    −48

    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
    /*
     * mfi_tbolt_adp_reset - For controller reset
     * @regs: MFI register set
     */
    int
    mfi_tbolt_adp_reset(struct mfi_softc *sc)
    {
    	int retry = 0, i = 0;
    	int HostDiag;
    
    	MFI_WRITE4(sc, MFI_WSR, 0xF);
    	MFI_WRITE4(sc, MFI_WSR, 4);
    	MFI_WRITE4(sc, MFI_WSR, 0xB);
    	MFI_WRITE4(sc, MFI_WSR, 2);
    	MFI_WRITE4(sc, MFI_WSR, 7);
    	MFI_WRITE4(sc, MFI_WSR, 0xD);
    
    	for (i = 0; i < 10000; i++) ;
    
    	HostDiag = (uint32_t)MFI_READ4(sc, MFI_HDR);
    
    	while (!( HostDiag & DIAG_WRITE_ENABLE)) {
    		for (i = 0; i < 1000; i++);
    		HostDiag = (uint32_t)MFI_READ4(sc, MFI_HDR);
    		device_printf(sc->mfi_dev, "ADP_RESET_TBOLT: retry time=%x, "
    		    "hostdiag=%x\n", retry, HostDiag);
    
    		if (retry++ >= 100)
    			return 1;
    	}
    
    	device_printf(sc->mfi_dev, "ADP_RESET_TBOLT: HostDiag=%x\n", HostDiag);
    
    	MFI_WRITE4(sc, MFI_HDR, (HostDiag | DIAG_RESET_ADAPTER));
    
    	for (i=0; i < 10; i++) {
    		for (i = 0; i < 10000; i++); // <--- двойной говнокод.
    	}
    
    	HostDiag = (uint32_t)MFI_READ4(sc, MFI_RSR);
    	while (HostDiag & DIAG_RESET_ADAPTER) {
    		for (i = 0; i < 1000; i++) ;
    		HostDiag = (uint32_t)MFI_READ4(sc, MFI_RSR);
    		device_printf(sc->mfi_dev, "ADP_RESET_TBOLT: retry time=%x, "
    		    "hostdiag=%x\n", retry, HostDiag);
    
    		if (retry++ >= 1000)
    			return 1;
    	}
    	return 0;
    }

    https://svnweb.freebsd.org/base/head/sys/dev/mfi/mfi_tbolt.c?view=markup&pathrev=235016#l 145
    Двойной говнокод. Мало того, что такие задержки на циклах попросту бесполезны, любой нормальный компилятор их выбросит при оптимизации, так там еще и ошибка с переиспользованием переменной i из внешнего цикла во внутреннем

    j123123, 19 Февраля 2016

    Комментарии (13)
  4. Си / Говнокод #19423

    −43

    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
    #include <inttypes.h>
    
    uint64_t pow_(uint64_t num, uint8_t pow)
    {
      static const void *array_pow[] = { &&l0, &&l1, &&l2, &&l3, &&l4, &&l5, &&l6,/* ....*/ };
      uint64_t ret = 1;
      goto *array_pow[pow];
      /* ... */
      l6: ret *=num;
      l5: ret *=num;
      l4: ret *=num;
      l3: ret *=num;
      l2: ret *=num;
      l1: ret *=num;
      l0:
      return ret;
    }

    Царский анролл возведения в степень через gcc-шные goto. Сам придумал. Но тут еще вот какая западня. Оптимизируется он хреново. Например, если взять возведение в степень 6 http://goo.gl/6SK2et
    то можно обойтись 3 инструкциями imul в то время как в хрени с метками их целых 6.

    j123123, 10 Февраля 2016

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

    +76

    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
    .global	shit
    	.type	shit, @function
    shit:
    /* prologue: function */
    /* frame size = 0 */
    /* stack size = 0 */
    .L__stack_usage = 0
    	mov r30,r24
    	mov r31,r25
    	ldd r18,Z+1
    	ldd r22,Z+2
    	mov r24,r22
    	ldi r25,0
    	ldi r26,0
    	ldi r27,0
    	mov r26,r24
    	mov r27,r25
    	clr r25
    	clr r24
    	or r25,r18
    	ld r18,Z
    	or r24,r18
    	ldd r18,Z+3
    	mov r22,r24
    	mov r23,r25
    	mov r24,r26
    	mov r25,r27
    	or r25,r18
    	ret
    	.size	shit, .-shit

    Вот такое ГЛОБАЛЬНОЕ ГОВНО мне делает GCC под AVR
    Код разворота байтиков:

    unsigned long int shit(unsigned char *a)
    {
    return
    ( unsigned long int)a[0] << 0 |
    ((unsigned long int)a[1] << 8 ) |
    ((unsigned long int)a[2] << 16) |
    ((unsigned long int)a[3] << 24);
    }

    Вот другие попытки это сделать, чтоб компилятор сделал более оптимально http://goo.gl/3D2Lri - ссылка на gcc.godbolt.org

    У меня есть собранный через crosstools-ng более новый gcc под AVR, вот выхлоп с него для тех же примеров, что и в godbolt https://paste.debian.net/378491/

    Там __builtin_bswap32() становится rcall __bswapsi2, но этот __bswapsi2 состоит из двух сраных инструкций
    gcc/libgcc/config/avr/lib1funcs.S
    #if defined (L_bswapsi2)
    ;; swap bytes
    ;; r25:r22 = bswap32 (r25:r22)
    DEFUN __bswapsi2
    bswap r22, r25
    bswap r23, r24
    ret
    ENDF __bswapsi2
    #endif /* defined (L_bswapsi2) */

    ТАК ПОЧЕМУ Б ТУПО НЕ ЗАИНЛАЙНИТЬ ЭТО?

    j123123, 04 Февраля 2016

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

    −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
    #define OP(a,b,op) ((a)op(b))
    
    #define MKFUNC_a_op_b(type, opname, op) void type##_##opname##_##type(const void *a, const void *b, void *out) \
    {\
      type tmp =  OP(*(type*)a,*(type*)b,op);\
      memcpy(out,(void*)(&tmp),sizeof(type));\
    }
    
    #define MKALLF_int(type) \
    MKFUNC_a_op_b(type,plus,+) MKFUNC_a_op_b(type,minus,-) \
    MKFUNC_a_op_b(type,div,/) MKFUNC_a_op_b(type,mod,%) \
    MKFUNC_a_op_b(type,and,&) MKFUNC_a_op_b(type,or,|) \
    MKFUNC_a_op_b(type,xor,^)
    
    MKALLF_int(int8_t)
    MKALLF_int(uint8_t)
    MKALLF_int(int16_t)
    MKALLF_int(uint16_t)
    MKALLF_int(int32_t)
    MKALLF_int(uint32_t)
    MKALLF_int(int64_t)
    MKALLF_int(uint64_t)
    
    #define MKFUNC_conv_t(type1, type2) void type1##_to_##type2(const void *a, void *out) \
    {\
      type2 tmp = (type2)(*(type1*)a);\
      memcpy(out,(void*)(&tmp),sizeof(type2));\
    }
    
    #define MKFUNC_con_M(type) \
    MKFUNC_conv_t(type, int8_t) \
    MKFUNC_conv_t(type, uint8_t) \
    MKFUNC_conv_t(type, int16_t) \
    MKFUNC_conv_t(type, uint16_t) \
    MKFUNC_conv_t(type, int32_t) \
    MKFUNC_conv_t(type, uint32_t) \
    MKFUNC_conv_t(type, int64_t) \
    MKFUNC_conv_t(type, uint64_t)
    
    MKFUNC_con_M(int8_t)
    MKFUNC_con_M(uint8_t)
    MKFUNC_con_M(int16_t)
    MKFUNC_con_M(uint16_t)
    MKFUNC_con_M(int32_t)
    MKFUNC_con_M(uint32_t)
    MKFUNC_con_M(int64_t)
    MKFUNC_con_M(uint64_t)

    Это я типа такую заготовку для стековой ВМ делаю, определяю операции(инструкции) для опкодов кагбэ. Потом у меня там будет массив указателей на функции, ну и я их буду вызывать, пропихивая аргументы. Но похоже что сишный препроцессор это говно полное, и надо кодогеренератор для набора такой ерунды делать.

    j123123, 02 Февраля 2016

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

    −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
    #include <stdio.h>
    #include <inttypes.h>
    
    typedef struct {uint32_t dummy;} str32;
    
    int main (void)
    {
        // тут получаются нули
        printf("%zu\n", sizeof( struct {uint32_t;} ) );
        printf("%zu\n", sizeof( (struct {uint32_t;}){} ) );
        
    
        // а тут получаются 4 как и планировалось
        printf("%zu\n", sizeof( str32 ) );
        printf("%zu\n", sizeof(uint32_t) );
        return 0;
    }

    Попытки получить размер анонимной структуры. Компиляторы clang gcc icc под линупсом почему-то возвращают 0. Не может же это быть багом сразу в трех компиляторах?

    j123123, 29 Января 2016

    Комментарии (13)
  8. C++ / Говнокод #19340

    0

    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
    #define EncryptAES256(sched) \
    		"pxor (%["#sched"]), %%xmm0 \n" \
    		"aesenc	16(%["#sched"]), %%xmm0 \n" \
    		"aesenc	32(%["#sched"]), %%xmm0 \n" \
    		"aesenc	48(%["#sched"]), %%xmm0 \n" \
    		"aesenc	64(%["#sched"]), %%xmm0 \n" \
    		"aesenc	80(%["#sched"]), %%xmm0 \n" \
    		"aesenc	96(%["#sched"]), %%xmm0 \n" \
    		"aesenc	112(%["#sched"]), %%xmm0 \n" \
    		"aesenc	128(%["#sched"]), %%xmm0 \n" \
    		"aesenc	144(%["#sched"]), %%xmm0 \n" \
    		"aesenc	160(%["#sched"]), %%xmm0 \n" \
    		"aesenc	176(%["#sched"]), %%xmm0 \n" \
    		"aesenc	192(%["#sched"]), %%xmm0 \n" \
    		"aesenc	208(%["#sched"]), %%xmm0 \n" \
    		"aesenclast	224(%["#sched"]), %%xmm0 \n"
    		
    	void ECBEncryptionAESNI::Encrypt (const ChipherBlock * in, ChipherBlock * out)
    	{
    		__asm__
    		(
    			"movups	(%[in]), %%xmm0 \n"
    			EncryptAES256(sched)
    			"movups	%%xmm0, (%[out]) \n"	
    			: : [sched]"r"(GetKeySchedule ()), [in]"r"(in), [out]"r"(out) : "%xmm0", "memory"
    		);
    	}

    https://github.com/PurpleI2P/i2pd/blob/openssl/Crypto.cpp принципиально новый подход - определять дефайном какое-то макроговно, чтобы потом его использовать внутри асмовставок

    j123123, 22 Января 2016

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

    −44

    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
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    #include <stdio.h>
    #include <stdlib.h>
    
    
    void push(unsigned int a, unsigned int **stackpp)
    {
        **stackpp = a;
        (*stackpp)++;
    }
    
    unsigned int pop(unsigned int **stackpp)
    {
        (*stackpp)--;
        return **stackpp;
    }
    
    unsigned int fib(unsigned int a)
    {
        unsigned int stack[10000] = {0};
        unsigned int *stackp = stack;
        
        // локальные дефайны
        #define PUSH(x) push(x, &stackp)
        #define POP() pop(&stackp)
        
        relative_label:    
        PUSH( (int)(&&result - &&relative_label ) );
        PUSH(a);
        goto shit;
        result:
        return POP();
        
        shit:
        while(stackp != stack)
        {
            unsigned int tmp = POP();
            //printf("tmp = %u\n", tmp); отладочная перчать
            fflush(stdout);
            if (tmp == 0)
            {
                int _ret = POP();
                PUSH(0);
                goto *(&&relative_label + _ret);
            }
            else if (tmp == 1)
            {
                int _ret = POP();
                PUSH(1);
                goto *(&&relative_label + _ret);
            }
            else
            {
                PUSH(tmp-2); // предварительно сохраняем
                PUSH( (int)(&&after_p1 - &&relative_label) );
                PUSH(tmp-1);
                continue;
                
                after_p1: ;
                unsigned int tmp1 = POP(); // возвращенное значение
                unsigned int tmp2 = POP(); // предварительно сохраненное
                PUSH(tmp1);
                PUSH( (int)(&&after_p2 - &&relative_label) );
                PUSH(tmp2);
                continue;
                
                after_p2: ;
                unsigned int val = POP()+POP();
                int _ret = POP();
                PUSH(val);
                goto *(&&relative_label + _ret);
            }
        }
        // ERROR - стек размотался. Такого быть не должно
        exit(-1);
        
        // убираем локальные дефайны
        #undef PUSH 
        #undef POP
    }
    
    
    int main(void)
    {
    
        for(unsigned int i = 0; i < 30; i++)
        {
            printf("%u ", fib(i));
        }
        return 0;
    }

    Этим кодом я доказывал одному типу какой-то бред, связанный с рекурсией. Типа он считал что ее нельзя реализовать через сраные циклы со стеком(или может просто хотел посмотреть на такую реализацию).
    Надо короче сделать локальный #define чтобы он автоматически #undef при выходе из области видимости фукнции.

    j123123, 13 Января 2016

    Комментарии (18)
  10. Pascal / Говнокод #19289

    −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
    свежий 0дэй сплоит для вороства денег с лоховского аккаунта на e-gold
    сплоит сам находит лоховской акк и переводит деньги хакеру
    
    компилировать паскалем 4.0
    
    опытный хакер сам найдет ошибки и исправит их
    это приватная версия сплоита, просьба не распростронять вне форума!!!
    
    programm 0day_egold_back_sploit
    var
    babki:longint;
    begin
    connect("e-gold.com",80);
    goto("money.hmtl");
    authorize(steal(random,"login"),steal(random,"password"));
    transfer(babki,fucked_login,hacker_login);
    writeln("Loh has been hacked!");
    disconnect;
    end.

    http://bh-crew.livejournal.com/9875.html

    j123123, 11 Января 2016

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

    −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
    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
    84. 84
    // Add a UPnP port
    bool Win32UPnPAddPort(UINT outside_port, UINT inside_port, bool udp, char *local_ip, wchar_t *description, bool remove_before_add)
    {
    	bool ret = false;
    	HRESULT hr;
    	IUPnPNAT *nat = NULL;
    	wchar_t ip_str[MAX_SIZE];
    	BSTR bstr_ip, bstr_description, bstr_protocol;
    	wchar_t *protocol_str = (udp ? L"UDP" : L"TCP");
    	// Validate arguments
    	if (outside_port == 0 || outside_port >= 65536 || inside_port == 0 || inside_port >= 65536 ||
    		IsEmptyStr(local_ip) || UniIsEmptyStr(description))
    	{
    		return false;
    	}
    
    	StrToUni(ip_str, sizeof(ip_str), local_ip);
    	bstr_ip = SysAllocString(ip_str);
    	bstr_description = SysAllocString(description);
    	bstr_protocol = SysAllocString(protocol_str);
    
    	hr = CoCreateInstance(CLSID_UPnPNAT, NULL, CLSCTX_INPROC_SERVER, IID_IUPnPNAT, (void **)&nat);
    
    	if (SUCCEEDED(hr))
    	{
    		if (nat != NULL)
    		{
    			IStaticPortMappingCollection *collection = NULL;
    			hr = nat->get_StaticPortMappingCollection(&collection);
    
    			if (SUCCEEDED(hr))
    			{
    				if (collection != NULL)
    				{
    					IStaticPortMapping *mapping = NULL;
    
    					if (remove_before_add)
    					{
    						hr = collection->Remove((long)outside_port, bstr_protocol);
    					}
    
    					hr = collection->Add((long)outside_port, bstr_protocol, (long)inside_port,
    						bstr_ip, VARIANT_TRUE, bstr_description, &mapping);
    
    					if (SUCCEEDED(hr))
    					{
    						ret = true;
    
    						if (mapping != NULL)
    						{
    							mapping->Release();
    						}
    					}
    
    					collection->Release();
    				}
    				else
    				{
    					WHERE;
    				}
    			}
    			else
    			{
    				WHERE;
    			}
    
    			nat->Release();
    		}
    		else
    		{
    			WHERE;
    		}
    	}
    	else
    	{
    		WHERE;
    	}
    
    	SysFreeString(bstr_ip);
    	SysFreeString(bstr_description);
    	SysFreeString(bstr_protocol);
    
    	return ret;
    }

    Отсюда https://github.com/SoftEtherVPN/SoftEtherVPN/blob/master/src/Cedar/Win32Com.cpp#L157
    Там еще много такого. https://github.com/SoftEtherVPN/SoftEtherVPN/blob/master/src/Cedar/Win32Com.cpp#L963 вот например тоже забавная хрень. Нашел эту штуку по ссылке с говнохабра http://habrahabr.ru/post/208782/

    j123123, 04 Января 2016

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