1. Лучший говнокод

    В номинации:
    За время:
  2. Assembler / Говнокод #8245

    +248

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    Актуальна задача о двух стеках
    
    push esp1
    push esp2
    
    Требуется реализация забывчивого стека
    
    push 1 [1,2,3] -> [1,1,2]

    alexoy, 19 Октября 2011

    Комментарии (6)
  3. Assembler / Говнокод #6463

    +247

    1. 1
    2. 2
    mov eax, eax			;without this crap, it fucks up
      mov ecx, ecx			;don't ask me why...

    нашел в инклудах к opengl

    ragim, 23 Апреля 2011

    Комментарии (15)
  4. Assembler / Говнокод #2430

    +246.7

    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
    proc mltcoef
              push ecx
              xor ecx,ecx
              xor edx,edx
              xor ebx,ebx
              mov eax,dword[coef+edx]
              _b:
              add [coef+edx],eax
              jc _c
              _e:
              cmp ecx,9
              jne _b
              inc ecx
    
              _c
              push edx
              _d
              add edx,4
              add [coef+edx],1
              jc _d
              pop edx
              jmp _e
              pop ecx
              ret
              endp

    Пока я писалвысирал эту НЁБ, я уже забыл, зачем оно было нужно.

    Leo_ня, 18 Января 2010

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

    +245

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    cmp     DWORD PTR [esi+4], 0     ; if obj->curChip == 0
        push    ebx
        push    edi
        jne     SHORT $LN8@harddetect
        movzx   ebx, WORD PTR [esi+12]   ; ebx = obj->baseport;
        jmp     SHORT $LN9@harddetect
    $LN8@harddetect:
        mov     ax, WORD PTR [esi+12]    ;\
        add     ax, 2                    ; шедевр!
        movzx   ebx, ax                  ;/
    $LN9@harddetect:

    Не понравился размер кода после компиляции. Полез посмотреть. Особо забавной показалась скомпилированная незатейливая конструкция:

    unsigned short port = (curChip == 0 ? baseport : baseport + 2);

    Компилятор VC++ 2005, с оптимизацией по размеру генерируемого кода. Наоптимизировал :D

    DemonId7, 22 Июля 2011

    Комментарии (17)
  6. Assembler / Говнокод #2252

    +243.6

    1. 001
    2. 002
    3. 003
    4. 004
    5. 005
    6. 006
    7. 007
    8. 008
    9. 009
    10. 010
    11. 011
    12. 012
    13. 013
    14. 014
    15. 015
    16. 016
    17. 017
    18. 018
    19. 019
    20. 020
    21. 021
    22. 022
    23. 023
    24. 024
    25. 025
    26. 026
    27. 027
    28. 028
    29. 029
    30. 030
    31. 031
    32. 032
    33. 033
    34. 034
    35. 035
    36. 036
    37. 037
    38. 038
    39. 039
    40. 040
    41. 041
    42. 042
    43. 043
    44. 044
    45. 045
    46. 046
    47. 047
    48. 048
    49. 049
    50. 050
    51. 051
    52. 052
    53. 053
    54. 054
    55. 055
    56. 056
    57. 057
    58. 058
    59. 059
    60. 060
    61. 061
    62. 062
    63. 063
    64. 064
    65. 065
    66. 066
    67. 067
    68. 068
    69. 069
    70. 070
    71. 071
    72. 072
    73. 073
    74. 074
    75. 075
    76. 076
    77. 077
    78. 078
    79. 079
    80. 080
    81. 081
    82. 082
    83. 083
    84. 084
    85. 085
    86. 086
    87. 087
    88. 088
    89. 089
    90. 090
    91. 091
    92. 092
    93. 093
    94. 094
    95. 095
    96. 096
    97. 097
    98. 098
    99. 099
    100. 100
    format ELF
    
    
    include 'macros.inc'
    
    
    public main
    
    
    extrn printf
    extrn puts
    extrn exit
    extrn strtok
    extrn getenv
    extrn strcmp
    extrn strtol
    extrn strcpy
    ; Функции для общения с БД
    extrn get_version ; ремейк на mysql_get_client_info()
    extrn get_product_by_single_name_ex
    
    CGI_HEADER db "Content-Type: text/html", 13,10, "X-Powered-by: FASM (Flat Assembler 1.68)",13,10,0
    QUERY_STRING db ?
    REQUEST_METHOD db ?
    
    	query_str_env_req	db	"QUERY_STRING", 0
    	request_method_env_req	db	"REQUEST_METHOD", 0	
    	RM_GET db "GET", 0
    	RM_POST db "POST",0
    
    NO_ACTION_ERROR_MSG db "No action", 0
    
    
    
    q_token db "="
    r_token db "&"
    
    
    ; Константы ACTION
    	AC_VERSION equ 0; Инфа о версии и копирайте
    
    	AC_PRODUCT_ID_BY_SINGLE_NAME equ 1; ID продукта по полному совпадению имени
    	
    
    section '.text' executable
    _start:
    
    	main:
    	ccall puts, CGI_HEADER
    	ccall getenv, request_method_env_req
    	push eax
    	;c
    	xor eax, eax
    	pop eax
    	ccall strcmp, eax, RM_GET ; TODO: ЗМЕНИТЬ НА POST!!!1111
    	cmp eax, 0
    	jne quit
    	
    	;Что прислали в Action. ( ТОЛЬКО GET )
    	
    	ccall getenv, query_str_env_req
    	ccall strcpy, QUERY_STRING, eax
    	ccall strtok, QUERY_STRING, q_token
    	push eax
    	ccall strcmp, eax, "act"
    	cmp eax, 0
    	jne no_act
    	je act
    no_act:
    	ccall puts, NO_ACTION_ERROR_MSG
    	jmp quit
    act:
    	
    	
    	; Узнаём, что за опция в act
    	pop eax;
    	ccall strtok, 0, q_token
    	ccall strtol, eax, 0, 10
    	cmp eax, AC_VERSION
    	je version_put
    	cmp eax, AC_PRODUCT_ID_BY_SINGLE_NAME
    	je product_id_by_single_name
    	jne quit
    
    version_put:
    	; версия - из mysql
    	ccall puts, "Web kernel v0.1. (c) 2009 by Sergei V. Adoniew ( [email protected] ) with MySQL: "
    	ccall get_version
    	ccall puts, eax
    	jmp quit
    
    product_id_by_single_name:
    
    	
    	;НА Входе: name=%docname%
    	;НА Выходе id
    	
    	; дробим строку на a=b разделителем &
     	ccall getenv, "QUERY_STRING"
    	;у нас в eax вся строка

    Собственный пьяный высер на фасме ( FASM ).

    Обратить внимание на ветвление:)

    AlDjabad, 09 Декабря 2009

    Комментарии (60)
  7. C++ / Говнокод #488

    +242.5

    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
    CNode* CBSTree::AddNode(CNode *&pTree, CNode *pNode)
    {
    ...
            return !NULL;
    }
    
    ...
    
            if(AddNode(pTree->left ,pNode)!=NULL)
            {
            ...
            }
    ...

    Надо не нулл - дадим не нулл!

    guest, 01 Февраля 2009

    Комментарии (9)
  8. Assembler / Говнокод #7383

    +242

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    proc HeapCompact(HANDLE hHeap, DWORD dwFlags)
    	mov     edi, edi
    	push    ebp
    	mov     ebp, esp
    	pop     ebp
    	jmp     RtlCompactHeap
    endp

    Код от Microsoft. Заглушка? А вот и нет! Для заглушки нужны 5 байтов, а pop ebp останется на месте, т.е. при вызове вершина стека нарушится. Вот не могли просто NOP написать...

    KIRK, 29 Июля 2011

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

    +242

    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
    main:
    	mov a, P0
    	dec a
    	inc a
    	jnz __div_part
    	jmp __mul_part
    __mul_part:
    	// mul
    	mov r0, P1
    	mov r2, P2
    	call __Mul
    	mov P1, r0
    	mov P2, r1
    	jmp __end		
    __div_part:
    	// div
    	mov r0, P1
    	mov r2, P2
    	call __Div
    	mov P1, r0
    	mov P2, r1
    	jmp __end
    __end:	
    end

    процедура main лабы по mcs-51

    valik-32, 08 Апреля 2011

    Комментарии (19)
  10. Assembler / Говнокод #2172

    +240.1

    1. 1
    2. 2
    fld qword ptr [d]
    call @ROUND

    Это творчество дельфийского компилятора на тему i := round(d);
    Он делает вызов функции ради одной пустяковой команды, что очень влияет на скорость.

    TarasB, 24 Ноября 2009

    Комментарии (283)
  11. Assembler / Говнокод #7378

    +240

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    db $8F, $AE, $A7, $A4, $E0, $A0, $A2, $AB, $EF, $EE, $20, $E3, $EE, $E2, $AD, $A5
    db $AD, $EC, $AA, $A8, $A9, $20, $A3, $AE, $A2, $AD, $AE, $AA, $AE, $A4, $A8, $AA
    db $20, $E1, $20, $A4, $AD, $F1, $AC, $20, $E1, $A8, $E1, $E2, $A5, $AC, $AD, $AE
    db $A3, $AE, $20, $A0, $A4, $AC, $A8, $AD, $A8, $E1, $E2, $E0, $A0, $E2, $AE, $E0
    db $A0, $21

    TarasB, 29 Июля 2011

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