1. Assembler / Говнокод #17114

    +147

    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
    strnstr proc
    	jrcxz @@3
    	push rdi
    	push rsi
    	mov rdi,rdx
    	mov al,[r9]
    	inc r9
    	dec r8
    @@1:
    	repne scasb
    	jne @@2
    	cmp rcx,r8
    	jb @@2
    	mov rsi,r9
    	mov rdx,rdi
    	mov r10,rcx
    	mov rcx,r8
    	repe cmpsb
    	je @@2
    	mov rcx,r10
    	mov rdi,rdx
    	jmp @@1
    @@2:
    	sete al
    	movzx rax,al
    	neg rax
    	and rax,rdi
    	pop rsi
    	pop rdi
    	ret
    @@3:
    	xor rax,rax
    	ret
    strnstr endp

    PSTR __fastcall strnstr(SIZE_T n1, const void* str1, SIZE_T n2, const void* str2);

    zhukas, 15 Ноября 2014

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

    +165

    1. 1
    2. 2
    mov eax, 4
    add dx, eax

    Во время службы попал я в ракетные войска и для облегчения жизни своей писал себе разные прожки старые бабки всё время как-бы невзначай крутились возле кабинета, и всё спрашивали, что ты там затих, почему тебя не слышно? первый раз я не ответил, так они начали ломиться в дверь, и орать, что ты там молчишь, что с тобой? начали материться, и говорить, что вообще дверь с петель снимут, алсо, они ругаются, если я компилю в дебаг режиме и отдаю заму, причём не просто вконце тестов, а непосредственно после дебага, мотивировал это тем, что лишний мусор, и сами потом мне говорили: вот мы скомпилим в релиз, и ты так делай! однажды я прожить сел, и слышу, бабки где-то у двери встали в отдалении, ну я в дебаге цикл прогнал, и на пол накарачики присел, а там щель очень широкая снизу у двери, ну я в щель и смотрю, а там бабки на карачиках сидит и в щель смотрит, и мне говорит: ты чё? ебанутый? чё ты там делаешь? бабки кстати всё время какие-то мануалы читают, чтобы писать сразу в машинном коде, пишут в интел прям через хекс редактор, а потом говорят, что ассемблер надоел, и ещё не толкают в esi ссылки на функции. пиздец короче! реальная история. я не тролль

    DesmondHume, 18 Октября 2014

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

    +146

    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
    .text:08104D0B                 mov     ebx, [ebp+arg_0]
    .text:08104D0E                 mov     ecx, [ebp+var_C]
    .text:08104D11                 mov     eax, 51EB851Fh
    .text:08104D16                 imul    ecx
    .text:08104D18                 sar     edx, 4
    .text:08104D1B                 mov     eax, ecx
    .text:08104D1D                 sar     eax, 1Fh
    .text:08104D20                 sub     edx, eax
    .text:08104D22                 mov     [ebp+var_C], edx
    .text:08104D25                 mov     ecx, [ebx+38h]
    .text:08104D28                 mov     eax, 51EB851Fh
    .text:08104D2D                 imul    ecx
    .text:08104D2F                 sar     edx, 4
    .text:08104D32                 mov     eax, ecx
    .text:08104D34                 sar     eax, 1Fh
    .text:08104D37                 sub     edx, eax
    .text:08104D39                 mov     [ebx+38h], edx
    .text:08104D3C                 cmp     [ebp+var_C], 0
    .text:08104D40                 jg      short loc_8104D55
    .text:08104D42                 mov     [ebp+var_C], 1
    .text:08104D49                 nop
    .text:08104D4A                 nop
    .text:08104D4B                 nop
    .text:08104D4C                 nop
    .text:08104D4D                 nop
    .text:08104D4E                 nop
    .text:08104D4F                 nop
    .text:08104D50                 nop
    .text:08104D51                 nop
    .text:08104D52                 nop
    .text:08104D53                 nop
    .text:08104D54                 nop
    .text:08104D55
    .text:08104D55 loc_8104D55:                            ; CODE XREF: session_skill::StartSession(bool)+222j
    .text:08104D55                 mov     eax, [ebp+arg_0]
    .text:08104D58                 cmp     byte ptr [eax+29h], 0
    .text:08104D5C                 jz      short loc_8104D74
    .text:08104D5E                 mov     ebx, [ebp+arg_0]
    .text:08104D61                 sub     esp, 0Ch
    .text:08104D64                 push    offset g_timer
    .text:08104D69                 call    _ZN5abase5timer8get_tickEv ; abase::timer::get_tick(void)
    .text:08104D6E                 add     esp, 10h
    .text:08104D71                 mov     [ebx+40h], eax
    .text:08104D74
    .text:08104D74 loc_8104D74:                            ; CODE XREF: session_skill::StartSession(bool)+23Ej
    .text:08104D74                 sub     esp, 0Ch
    .text:08104D77                 push    [ebp+var_C]
    .text:08104D7A                 push    0
    .text:08104D7C                 push    14h
    .text:08104D7E                 push    offset g_timer
    .text:08104D83                 mov     eax, [ebp+arg_0]
    .text:08104D86                 add     eax, 10h
    .text:08104D89                 push    eax
    .text:08104D8A                 call    _ZN5abase10timer_task8SetTimerERNS_5timerEiii ; abase::timer_task::SetTimer(abase::timer &,int,int,int)
    .text:08104D8F                 add     esp, 20h
    .text:08104D92                 sub     esp, 8
    .text:08104D95                 sub     esp, 4
    .text:08104D98                 push    18h             ; size
    .text:08104D9A                 call    _ZN5abase12ASmallObjectnwEj ; abase::ASmallObject::operator new(uint)
    .text:08104D9F                 add     esp, 8
    .text:08104DA2                 mov     [ebp+ptr], eax
    .text:08104DA5                 mov     [ebp+var_19], 1
    .text:08104DA9                 sub     esp, 8
    .text:08104DAC                 push    0Dh
    .text:08104DAE                 mov     eax, [ebp+arg_0]
    .text:08104DB1                 push    dword ptr [eax+8]
    .text:08104DB4                 mov     eax, [ebp+arg_0]
    .text:08104DB7                 push    dword ptr [eax+4]
    .text:08104DBA                 push    [ebp+ptr]
    .text:08104DBD                 call    _ZN22skill_interrupt_filterC1EP11gactive_impii ; skill_interrupt_filter::skill_interrupt_filter(gactive_imp *,int,int)
    .text:08104DC2                 add     esp, 18h
    .text:08104DC5                 mov     [ebp+var_19], 0
    .text:08104DC9                 mov     eax, [ebp+ptr]
    .text:08104DCC                 push    eax
    .text:08104DCD                 mov     eax, [ebp+arg_0]
    .text:08104DD0                 mov     eax, [eax+4]
    .text:08104DD3                 add     eax, 100h
    .text:08104DD8                 push    eax
    .text:08104DD9                 call    _ZN10filter_man9AddFilterEP6filter ; filter_man::AddFilter(filter *)
    .text:08104DDE                 add     esp, 10h
    .text:08104DE1                 jmp     short loc_8104E13

    вот собсно

    myWeb, 03 Мая 2014

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

    +143

    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
    entry start 
    
    include 'C:\Program Files\Casm\win32a.inc' ; Include file win32a.inc 
    
    section '.text' code readable executable 
    
      start: 
    
            invoke  GetModuleHandle,0 
            invoke  DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0 
            or      eax,eax 
            jz      exit 
      exit: 
            invoke  ExitProcess,0 
    
    proc DialogProc hwnddlg,msg,wparam,lparam 
            push    ebx esi edi 
            cmp     [msg],WM_INITDIALOG 
            je      .wminitdialog 
            cmp     [msg],WM_CLOSE 
            je      .wmclose 
            xor     eax,eax 
            jmp     .finish 
      .wminitdialog: 
            jmp     .processed 
      .wmclose: 
            invoke  EndDialog,[hwnddlg],0 
      .processed: 
            mov     eax,1 
      .finish: 
            pop     edi esi ebx 
            ret 
    endp 
    
    section '.bss' readable writeable 
    
      flags dd ? 
      caption rb 40h 
      message rb 100h 
    
    section '.idata' import data readable writeable 
    
      library kernel,'KERNEL32.DLL',\ 
              user,'USER32.DLL' 
    
      import kernel,\ 
             GetModuleHandle,'GetModuleHandleA',\ 
             ExitProcess,'ExitProcess' 
    
      import user,\ 
             DialogBoxParam,'DialogBoxParamA',\ 
             EndDialog,'EndDialog' 
    
    section '.rsrc' resource data readable 
    
      directory RT_DIALOG,dialogs 
    
      resource dialogs,\ 
               37,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration 
    
      dialog demonstration,'TestProgram',170,170,105,75,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME 
      dialogitem 'STATIC','Compile',-1,10,10,70,29,WS_VISIBLE 
      dialogitem 'STATIC','WITH...',-1,10,20,70,8,WS_VISIBLE 
      dialogitem 'STATIC','C',-1,10,30,70,8,WS_VISIBLE 
      dialogitem 'STATIC','A',-1,10,40,70,8,WS_VISIBLE 
      dialogitem 'STATIC','S',-1,10,50,70,8,WS_VISIBLE 
      dialogitem 'STATIC','M',-1,10,60,70,8,WS_VISIBLE 
      enddialog

    Окно на Fasm M.P.E.

    Mobac, 19 Апреля 2014

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

    +137

    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
    ascdec proc near
    mov di,0
    mov si,0
    xor dx,dx
    mov bx,offset buf
    add bx,10
    mov cx,11
    lo0:
    dec bx
    dec cx
    jcxz ex0
    mov al,[bx]
    cmp al,255
    je lo0
    lo1:
    sub al,30h 
    push bx
    push cx
    mov bx,offset deci
    xor dx,dx
    mov cx,word ptr[bx+2]
    mov bx,word ptr[bx]
    mov ah,0
    call mult32 
    add di,ax
    adc si,dx
    mov bx,offset deci
    mov ax,[bx]
    mov dx,[bx+2]
    call multen
    mov bx,offset deci
    mov [bx],ax
    mov [bx+2],dx
    pop cx
    pop bx
    dec bx
    dec cx
    jcxz ex0
    mov al,[bx]
    jmp lo1
    ex0:
    mov ax,di
    mov dx,si
    test dx,8000h
    jz enda
    jmp error
    enda:
    cmp minus,2dh
    jne pl1
    call ccc
    pl1:
    ret
    ascdec endp
    multen proc near
    push bx
    push cx
    mov bx,10
    mov cx,0
    call mult32
    pop cx
    pop bx
    ret
    multen endp
    mult32 proc near 
    push si
    push di
    push dx
    push ax
    test dx,8000h 
    jz ml
    call ucc
    push dx
    push ax
    ml:
    mov dx,cx
    mov ax,bx
    test dx,8000h  
    jz ml0
    call ucc 
    mov bx,ax
    mov cx,dx
    ml0:
    pop ax
    pop dx
    mov si,0
    mov di,0
    mul bx ;AX*BX
    mov di,ax
    mov si,dx
    pop ax
    mul cx ;AX*CX
    add si,ax
    pop dx
    ucc proc near
    dec ax
    sbb dx,0
    not ax
    not dx
    ret
    ucc endp

    Превращение строки в число.

    Abbath, 27 Марта 2014

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

    +132

    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
    format PE GUI
    entry start
    
    section '.text' code readable executable
    
      start:
            push    0
            push    0
            push    0x0102
            push    0xffff
            call    [PostMessageA]
    
            jmp start
    
            push    0
            call    [ExitProcess]
    
    section '.data' data readable writeable
    
    section '.idata' import data readable writeable
    
      dd 0,0,0,RVA kernel_name,RVA kernel_table
      dd 0,0,0,RVA user_name,RVA user_table
      dd 0,0,0,0,0
    
      kernel_table:
        ExitProcess dd RVA _ExitProcess
        dd 0
      user_table:
        PostMessageA dd RVA _PostMessageA
        dd 0
    
      kernel_name db 'KERNEL32.DLL',0
      user_name db 'USER32.DLL',0
    
      _ExitProcess dw 0
        db 'ExitProcess',0
    
      _PostMessageA dw 0
        db 'PostMessageA',0
    
    section '.reloc' fixups data readable discardable       ; needed for Win32s

    А вот таким нехитрым кодом на FASM'e мы намертво вешаем всю винду до перезагрузки или выхода из системы (по ctrl+alt+del). Ну и, опять-таки, кладем большой и толстый на UAC.

    gost, 25 Марта 2014

    Комментарии (29)
  7. Assembler / Говнокод #15415

    +145

    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
    global _start
    
    section .text
    
    _start:
    
    	mov	eax, 0b10010100101100110111110110111110
    	;  эти битики будут выведены на печать
    	
    	mov	ecx, 0b00011000000110000001100000011000
    	; Четыре недозаполненных ascii кодов символов '0' или '1', в который из флага переноса заталкивается битик 0 или 1
    
    	%rep 8
    	mov	ebx, ecx
    	%rep    3
    		shr	eax, 1 ; Захавываем битик в флаг переноса
    		rcl	ebx, 1 ; Запихиваем из флага переноса в недозаполненные ascii коды
    		rol	ebx, 7 ; Проматываем на следующий кусок
    	%endrep
    	shr	eax, 1
    	rcl	ebx, 1 ; На последней стадии все то же самое, только проматывать уже не надо
    
    	push ebx ; Теперь все битики всунуты, пихнем содержимое регистра в стек
    	%endrep
    
    
        
    	mov	eax, 04h ; write()
    	mov	ebx, 01h ; stdout
    	mov	ecx, esp ; распечатаем из стека
    	mov	edx, 32  ; 32 символа
    	int	80h
    	
    	mov	eax, 01h ; exit()
    	xor	ebx, ebx ; errno
    	int	80h

    NASM Linux x86
    Суть - вывести содержимое регистра в двоичной системе счисления
    Можно было вместо этой мути использовать CMOVC ( Move if carry (CF=1) ) или еще что-нибудь такое придумать, есть же еще BT, BTS, глаза разбегаются
    ...вообще хрен его знает, какой-то упоротый этот x86 ассемблер, надо бы AVR осваивать, там регистров побольше

    j123123, 10 Марта 2014

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

    +143

    1. 1
    2. 2
    .686
    .model tiny

    Весьма специфичная ошибка при использовании masm32.

    laMer007, 14 Декабря 2013

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

    +129

    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
    product:
    .LFB34:
            .cfi_startproc
            xor     eax, eax
            test    esi, esi
            je      .L7
            lea     eax, [rsi-1]
            mov     edi, edi
            add     rax, 1
            imul    rax, rdi
    .L7:
            rep
            ret
            .cfi_endproc

    Оптимизациия умножения через рекурсию. Сишный код:

    inline unsigned long int product_0(const unsigned int a, const unsigned int b, const unsigned long int tmp)
    {
    if (b == 0) return tmp;
    return product_0(a, b-1, tmp+a);
    }

    unsigned long int product(const unsigned int a, const unsigned int b)
    {
    return product_0(a, b, 0);
    }

    Распознать умножение (imul) в этой рекурсивной хрени компилятор смог, но при этом как-то через жопу, нагенерировав при этом много лишнего говна.
    gcc version 4.5.1

    j123123, 12 Октября 2013

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

    +108

    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
    ; Assign standard procedure (PChar)
    
    AssignFileC:
    
    	DB	0BAH			;MOV DX,immed
    
    ; Assign standard procedure (String)
    
    AssignFile:
    
    	XOR	DX,DX
    	MOV	BX,SP
    	PUSH	DS
    	LES	DI,SS:[BX+8]
    	LDS	SI,SS:[BX+4]
    	CLD
    	XOR	AX,AX
    	STOSW
    	MOV	AX,fmClosed
    	STOSW
    	XOR	AX,AX
    	MOV	CX,(fName-fBufSize)/2
    	REP	STOSW
        IF WindowsVersion
    	PUSH	ES
    	PUSH	DI
    	PUSH	ES
    	PUSH	DI
        ENDIF
    	MOV	CX,79
    	OR	DX,DX
    	JNE	@@1
    	LODSB
    	CMP	CL,AL
    	JBE	@@1
    	MOV	CL,AL
    	JCXZ	@@2
    @@1:	LODSB
    	OR	AL,AL
    	JE	@@2
    	STOSB
    	LOOP	@@1
    @@2:	XOR	AL,AL
    	STOSB
        IF WindowsVersion
    	CALL	AnsiToOem
        ENDIF
    	POP	DS
    	RETF	8

    Угадайте с первых строк автора и как выполнится инструкция DB 0BAH; XOR DX, DX.

    inkanus-gray, 26 Июня 2013

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