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

    Комментарии (23) RSS

    • Вау, какой код! Я нифига не понял. Вот собсно.
      Ответить
      • Это вообще похоже на отрыжку ИДЫ, тут если это скомпилировано с высокоуровневого языка без поллитри и не разберешся.
        Ответить
    • показать все, что скрытоВсе по команде подставляют мне свои анусы.
      Ответить
    • "Поясните мысль!" (c) местное
      Ответить
    • И в чем тут говно?
      Ответить
      • mov eax, [ebp+arg_0]
        mov eax, [eax+4]
        Я нашел говно: 2 раза в eax кладут подряд, значит первый раз зря! Я прав?
        Ответить
        • > Я прав?
          Нет :) За одну операцию это никак не сделать.
          Ответить
          • lea?
            Ответить
            • Нафига?
              Ответить
              • Чтобы сложить три операнда (два регистра и константное смещение) одним махом.
                Edit: ох щи. тупанул - я подумал там add.
                Ответить
                • Посмотри внимательно, там не так всё происходит. Там два "разименования". Сперва выгружаем со стека первый аргумент функции, потом обращаемся по выгруженному адресу (со сдвигом 4).
                  Грубо говоря,
                  void f(int *p) {
                    int eax;
                    eax = (int) p;
                    eax = ((int*) eax)[1]; 
                  }
                  Ответить
      • add esp, 20h
        sub esp, 8
        sub esp, 4
        Или вот! Один раз прибавили, два вычли. Можно одной командой сделать. Я прав?
        Ответить
        • А вот это очень странный код, да.

          Может быть мы тут чего-то не видим (т.к. недодизасмили другой кусок): например из обработчиков исключений есть переходы на эти строки и т.п.?

          Ну либо это -O0, и компилятор намеренно пишет такое говно, не пытаясь увязать куски кода друг с другом: add esp, 20h скидывает со стека аргументы предыдущей функции, sub esp, 8 резервирует какую-нибудь локальную переменную и т.п.
          Ответить
    • А это замечательная идея - постить сюда рандомный код, и ждать, когда в комментах найдут в нем говно.
      Ответить
    • показать все, что скрытоИ снова всем по минусу.
      Ответить
    • С каких пор высер Иды - говнокод?
      Ответить
      • Например, если ида делает совсем странные вещи.
        Например, какой понт операции с плавучкой заворачивать в отдельные функции?
        Ответить
        • Дык разве это не компилятор сделал?
          Ответить
    • И зачем я зашел в ассемблер... брр ... страшно тут у вас... пойду в родненькие SQL,PASCAL,C#
      Ответить

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