Сборный / Говнокод #7003 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
CODE:00403FB0 proc unk2_Reset
CODE:00403FB0         mov     [ds:sizeMemUnk_2_1], 0
CODE:00403FBA         mov     [ds:sizeMemUnk_2_2], 0
CODE:00403FC4         xor     eax, eax
CODE:00403FC6         mov     [ds:ddUnk2_42AB0C], eax
CODE:00403FCB         mov     [ds:ddUnk2_42AB10], eax
CODE:00403FD0         mov     [ds:ddUnk2_42AB14], eax
CODE:00403FD5         mov     [ds:dbUnk2_42AB5E], al
CODE:00403FDA         xor     eax, eax
CODE:00403FDC         mov     [ds:ddUnk2_42AB18], eax
CODE:00403FE1         mov     [ds:ddUnk2_42AB1C], eax
CODE:00403FE6         xor     eax, eax
CODE:00403FE8         mov     [ds:ddUnk2_42AB20], eax
CODE:00403FED         mov     [ds:ddUnk2_42AB24], eax
CODE:00403FF2         mov     eax, [ds:ddInit_6]      ; eax = 6
CODE:00403FF7         sub     eax, 2
CODE:00403FFA         mov     [ds:ddUnk2_42AB2C], eax
CODE:00403FFF         mov     eax, 12000h
CODE:00404004         mov     [ds:ddUnk2_42AB28], eax
CODE:00404009         cmp     eax, 2008h
CODE:0040400E         jb      short loc_404015
CODE:00404010         mov     eax, 2008h
CODE:00404015 loc_404015:
CODE:00404015         sub     eax, 8
CODE:00404018         mov     [ds:ddUnk2_42AB30], eax
CODE:0040401D         jmp     loc_41C374
CODE:0040401D endp

Нашел настоящую жесть. Особенно манипуляции с константами позабавили. Не ожидал такого от проф. программистов.

DemonId7 DemonId7, (Updated )

Комментарии (152, +152)

Сборный / Говнокод #6977 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
; -------- мув в AX опкода команды UD2 --------
CODE:004051B0         mov     al, 0Bh
CODE:004051B2         mov     ah, 0Fh
CODE:004051B4         xchg    al, ah
CODE:004051B6         push    eax     ; save opcode
CODE:004051B7         call    sub_40A1E5

; -------- вис для отладки --------
; если зависли, то найден дубликат (жестко, но надежно :D )
CODE:0041C676         call    hash_FindWord
CODE:0041C67B @@dbllock:
CODE:0041C67B         jnc     @@dbllock ; <- если хэш найден, то висим

; -------- ну и искомый баг --------
; неправильный цикл поиска последнего элемента списка
CODE:00401698 proc sub_401698
CODE:00401698         mov     ecx, [dword_42944C]
CODE:0040169E         jecxz   loc_4016AA
CODE:004016A0 loc_4016A0:
CODE:004016A0         mov     ecx, [ecx] ; ecx = next block
CODE:004016A2         and     ecx, ecx
CODE:004016A4         jnz     loc_4016A0
CODE:004016A6         mov     eax, [ecx+8] ; <-- bag: ECX = 0
CODE:004016A9         retn
CODE:004016AA loc_4016AA:
CODE:004016AA         mov     eax, [dword_42A58E]
CODE:004016AF         retn
CODE:004016AF endp

Искал баги в борландовском компиляторе. Нашел немало забавных моментов, три выкладываю.

DemonId7 DemonId7, (Updated )

Комментарии (35, +35)

Сборный / Говнокод #6936 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
; загрузка из cfg-файла переменной Gravity
seg011:06CA         fld     [dbl_45A48]   ; 0.2
seg011:06CF         add     sp, -8
seg011:06D2         fstp    [bp+var_16]   ; default=0.2
seg011:06D6         push    ds
seg011:06D7         mov     ax, offset aGravity
seg011:06DA         push    ax            ; key="GRAVITY"
seg011:06DB         wait
seg011:06DD         push    cs
seg011:06DE         call    near ptr cfg_ReadDbl
seg011:06E1         add     sp, 12
seg011:06E4         fstp    [curGravity]  ; cur=cfg_ReadDbl()
; проверка загруженного значения на диапазон [0,05..10,0]
seg011:06E9         fld     [flt10]
seg011:06EE         add     sp, -8
seg011:06F1         fstp    [bp+var_16]   ; max = 10.0
seg011:06F5         fld     [minGravity]
seg011:06FA         add     sp, -8
seg011:06FD         fstp    [bp+var_1E]   ; min = 0.05
seg011:0701         fld     [curGravity]
seg011:0706         add     sp, -8
seg011:0709         fstp    [bp+var_26]   ; cur
seg011:070D         wait
seg011:070F         push    cs
seg011:0710         call    near ptr CheckRangeDbl
seg011:0713         fstp    st            ; результат нах...
seg011:0716         add     sp, 24
<....cut....>

; double CheckRangeDbl(double cur, double min, double max)
seg011:0077 proc    CheckRangeDbl far
seg011:0077 var_2   = word ptr -2
seg011:0077 @@cur   = qword ptr  6
seg011:0077 @@min   = qword ptr  0Eh
seg011:0077 @@max   = qword ptr  16h
seg011:0077         push    bp
seg011:0078         mov     bp, sp
seg011:007A         dec     sp
seg011:007B         dec     sp
seg011:007C         fld     [<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a4c6d48fe4">[email protected]</a>@cur]
seg011:0080         fcomp   [<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ddbfadf69d">[email protected]</a>@min]
seg011:0084         fnstsw  [bp+var_2]
seg011:0088         wait
seg011:008A         mov     ax, [bp+var_2]
seg011:008D         sahf
seg011:008E         jnb     @@chk_max     ; if (cur < min)
seg011:0090         fld     [<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="385a481378">[email protected]</a>@min]    ;     st(0) = min
seg011:0094         jmp     @@exit
seg011:0096 @@chk_max:                    ; else
seg011:0096         fld     [<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ea889ac1aa">[email protected]</a>@cur]
seg011:009A         fcomp   [<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="5735277c17">[email protected]</a>@max]
seg011:009E         fnstsw  [bp+var_2]
seg011:00A2         wait
seg011:00A4         mov     ax, [bp+var_2]
seg011:00A7         sahf
seg011:00A8         jbe     @@ret_cur     ; if (cur > max)
seg011:00AA         fld     [<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="cfadbfe48f">[email protected]</a>@max]    ;     st(0) = max
seg011:00AE         jmp     @@exit
seg011:00B0 @@ret_cur:                    ; else
seg011:00B0         fld     [<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1a786a315a">[email protected]</a>@cur]    ;     st(0) = cur
seg011:00B4 @@exit:
seg011:00B4         fst     [<a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8fedffa4cf">[email protected]</a>@cur]
seg011:00B8         wait
seg011:00BA         mov     sp, bp
seg011:00BC         pop     bp
seg011:00BD         retf                  ; return st(0)
seg011:00BD endp    CheckRangeDbl

Из старой, очень популярной игрухи (Scorshed Earth). Все как положено, подгружаемые из cfg-файла данные проходят проверку. Только вот результаты проверок (для double, для int и прочих типов) попросту отбрасываются :) Даже не знаю, как такое можно было накодить, на невнимательность непохоже - такого кода довольно много.

DemonId7 DemonId7, (Updated )

Комментарии (21, +21)

Сборный / Говнокод #6827 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
domain db "91.213.217.36"
softname db "calc.exe",0
.......................
Makehttp proc
 lea edi,url
 mov eax,70747468h
 mov [edi],eax
 mov eax,3ah
 mov [edi+4],eax
 mov eax,2f2fh
 mov [edi+5],eax
 lea esi,domain
 xor ecx,ecx
 push edx
 xor edx,edx
 mov edx,7
 mov cx,sizeof domain
 dom:
 lodsb
 mov [edi+edx],al
 add edx,1
 loop dom
 mov eax,2fh
 mov [edi+edx],eax
 add edx,1
 lea esi,softname
 mov cx,sizeof softname
 gen:
 lodsb
 mov [edi+edx],al
 add edx,1
 loop gen
 pop edx
 xor eax,eax
 mov eax,1
 ret
Makehttp endp

comodo ругался на строку http:// говоря что вирус :)Наговноколил это и пошел спать :)

koloss koloss, (Updated )

Комментарии (46, +46)

Сборный / Говнокод #6452 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
00614A77  |.  8BF0          MOV ESI,EAX
00614A79  |.  BB 01000000   MOV EBX,1
00614A7E  |.  EB 01         JMP SHORT 00614A81
00614A80  |>  43            /INC EBX
00614A81  |>  3BF3           CMP ESI,EBX
00614A83  |.  7C 07         |JL SHORT 00614A8C
00614A85  |.  807C1F FF 20  |CMP BYTE PTR DS:[EDI+EBX-1],20
00614A8A  |.^ 76 F4         \JBE SHORT 00614A80

Оптимизация компилятора

Xekep Xekep, (Updated )

Комментарии (20, +20)

Сборный / Говнокод #6404 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
.386
.model flat,stdcall
 option  casemap:none
      include   c:\masm32\includes\windows.inc
      include   c:\masm32\includes\user32.inc
      include   c:\masm32\includes\kernel32.inc
      includelib c:\masm32\lib\user32.lib
      includelib c:\masm32\lib\kernel32.lib
 bufsize EQU 12
.data
  a dd 300
  b dd 500
  d dd 300
  fmt db "Max = %2d",0
  buf db bufsize dup(0)
  ctrlf db 0dh,0ah
  stdout dd ?
  cWritten dd ?
  result dd ?
.code
 start:
  invoke GetStdHandle,STD_OUTPUT_HANDLE
  mov stdout,eax
   mov eax,a            
   mov result,eax  ; изначально максимальный это a
   cmp eax,b       ; сравниваем со вторым числом
   jbe big1        ; если a<=b , значит b больше a
   ja min1         ; иначе a ещё максимальное
  big1:
    mov eax,b           
	mov result,eax  ;теперь b максимальное
    cmp eax,d 
	jbe big2   ; максимальное c 
	jmp print
	big2: 
	  mov eax,d 
	  mov result,eax ;максимальный c
	  jmp print
  min1:
    mov eax,d
	cmp eax,a
	jbe big3
	mov result,eax
	jmp print
	big3:
	  mov eax,a
	  mov result,eax
	  jmp print
   print:
    mov edx,result
    invoke wsprintf, ADDR buf, ADDR fmt, edx
    invoke WriteConsoleA, stdout, ADDR buf, bufsize, ADDR cWritten, NULL
    invoke WriteConsoleA, stdout, ADDR ctrlf, 2, ADDR cWritten, NULL
 end start

С ума сойти. И это сравнение трёх чисел, которое делается в два простейших условия...

Ymilij Ymilij, (Updated )

Комментарии (12, +12)

Сборный / Говнокод #6292 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 valik-32, (Updated )

Комментарии (20, +20)