1. 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) RSS

    • 0 Бах!

      XOR EDX, EDX ? (не думал, сказал что первое в голову пришло. У префикса 32хбит другой код)
      Ответить
      • Это не было бы так весело, если бы О'Бах действительно был бы префиксом. Первая инструкция подпрограммы AssignFileC выполнится как mov dx, 0D233h. Это же очевидно, ведь все знают, что xor dx, dx скомпилируется в db 033h, 0d2h.
        Здесь нужен зелёный цвет или и так нормально?
        А на RISC-процессорах так нельзя!
        Ответить
        • Jump в середину инструкции? Да чтоб их в аду черти драли за такое.
          Ответить
          • Я хотел на этом остановиться, но в конце кода заметил ещё одну бомбу, заложенную только в виндовую версию библиотеки: в имени файла нельзя использовать символы, коды которых за пределами пересечения множеств {ANSI codepage} и {OEM codepage}.
            Ответить
    • ИВАННН ОКОЯННЫЙ
      Ответить
    • показать все, что скрыто-
      Ответить

    Добавить комментарий