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

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
format pe gui 5.0

include 'win32ax.inc'

  _title db '1Kbyte window',0
  _class db '#32770',0

  old_wndproc dd 0

entry $
  xor edi,edi
  mov ecx,$80000000
  mov esi,$400000
  mov eax,WS_VISIBLE+WS_OVERLAPPEDWINDOW
  invoke CreateWindowEx,edi,_class,edi,eax,ecx,ecx,ecx,ecx,edi,edi,edi,edi
  mov ebx,eax
  invoke SetWindowLong,ebx,GWL_WNDPROC,wnd_proc
  mov [old_wndproc],eax
  invoke SendMessage,ebx,WM_INITDIALOG,edi,edi
  sub esp,32
  mov ebx,esp

msg_loop:
  invoke GetMessage,ebx,edi,edi,edi
  cmp eax,1
  jb app_exit
  jne msg_loop
  invoke DispatchMessage,ebx
  jmp msg_loop

wnd_proc:
  mov eax,[esp+8]
  cmp eax,WM_INITDIALOG
  je app_init
  cmp eax,WM_CLOSE
  je app_exit
  pop eax
  push [old_wndproc]
  push eax
  jmp [CallWindowProc]

app_init:
  mov eax,[esp+4]
  invoke SendMessage,eax,WM_SETTEXT,0,_title
  xor eax,eax
  ret

app_exit:
  invoke ExitProcess,edi

data import
  library\
    kernel32,'kernel32.dll',\
    user32,'user32.dll'
  include 'api\kernel32.inc'
  include 'api\user32.inc'
end data

Приветствуем!
Вот это говнокод однако?
...

Запостил: chiacorp chiacorp, (Updated )

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

    • В том, что это лаба (хотя я не уверен, преподают ли поделие слащавца-Томаса в вузах). К тому же, не следует совсем исключать возможность наличия говна в авторе поста.
      Ответить
      • На ранних фото он действительно манерный - только не пойму, гей он, или просто воспитанный интеллигент. Изучаяролики, заметно, как сильно его волнуют и даже пугают вопросы аудитории, напряженно ловит каждое слово - вряд ли это оттого, что он сомневается в своей компетенции, тут дело в другом. На более поздних видео он держится намного более уверенно - очевидно, результат занятий с психологом, учился не бояться толпы.
        Ответить
  • invoke CreateWindowEx,edi,_class,edi,eax,ecx,ecx,ecx,ecx,edi,edi,edi,edi
    мощно
    Ответить
    • Из всех параметров этой API важны только 2, на худой конец - 3: стиль окна, его название и класс. Остальные можно тупо забить нулями. Лажа только в этом вызове?

      Хм. Регистр-счётчик используется не по назначению:

      mov ecx,$80000000

      ebx ведь нужен?
      Ответить
      • ECX - такой же регистр общего назначения, как и остальные, с разрядностью в 32 бита.
        Ответить
        • нет, не такой же
          это еще счетчик, который отвечет залуп
          Ответить
            • а вот суп
              из семи залуп

              три покрошены,
              четыре так брошены
              Ответить
              • Пошел нахуй с моей ветки, гандон
                Ответить
              • Зачем они никода не понимал. Ещё rep movs scas и прочий такой хлам ненужный.
                Ответить
                • XLAT очень удобно для таблиц преобращзования

                  а rep чтобы быстрее
                  Ответить
                  • Компактнее согласен, удобнее кто что понимает под удобством? По скорости проигрывает однозначно.
                    Ответить
                    • размер кода может быть важен
                      наприме чтобы влезть в еш
                      Ответить
                        • rep retn реально встречается в коде, чтобы добить буфер предиктора, когда спекулятивное исполнение опкода, следующего за retn, нежелательно.

                          Выполняется почти как nop + retn, но только считается одной инструкцией, а не двумя.
                          Ответить
                          • >, когда спекулятивное исполнение опкода, следующего за retn, нежелательно.

                            для защиты от мельдауна?
                            Ответить
                            • Там какая-то фигня была на AMD K8, когда предиктор глючил по-страшному и тратил такты на декодирование ненужной фигни, которая никогда не выполнится. Поэтому во все кокококомпиляторы добавили этот ненужный префикс перед ret.

                              Этой глючной реализации посвятили целый сайт:
                              http://repzret.org/p/repzret/

                              В 8080 никаких предикторов не было, именно поэтому я за 8080.
                              Ответить
                                • Да, за «Meltdown», за «Spectre», за «FDIV», за «F0 0F», за вот это всё...

                                  О, сколько нам открытий чудных
                                  Приносит «Микрософта» дух
                                  И «Интел» –— сын ошибок трудных,
                                  И «Борланд» —– «Парадоксов» друг.

                                  А мне нравится обкладывать код воркэраундами и дрочить...
                                  Ответить
                                  • Справедливости ради надо сказать что интел бесплатно менял процы с F00F, а адм рекомендовал делать хуню
                                    Ответить
                                  • в 80286 не было никаких "багов"
                                    именно потому я за "IBM PC AT"
                                    Ответить
                                    • 86BUGS.LST

                                      (C) Copyright 1993, 1994 By Harald Feldmann Revision 04, Nov 3rd 1994.
                                      
                                      
                                      
                                      Hamarsoft's 86BUGS list, (C) 1993/94 By Hamarsoft (R)
                                      ──────────────────────────────────────────────────────────────────────────────
                                      
                                      The 86BUGS list, distributed with Ralf Brown's Interrupt list, is maintained
                                      and provided to you by Hamarsoft, the maker of the HAP & PAH datacompression
                                      program. Latest version of HAP & PAH is 3.14e. If you like this list you are
                                      encouraged to register the HAP 3.00 shareware program. You will receive
                                      the latest, registered, version of HAP 3.14e by air-mail on 3.5" diskette.
                                      FTP to garbo.uwasa.fi and get pc/arcers/hap300re.zip   for more info.
                                      Ответить
                                              • Mnemonic: AAD
                                                Opcode  : D5 imm8  (88=60, 86=60, 286=14, 386=19, 486=14 clocks)
                                                Bug in  : Is an opcode variant on Intel's 88,86,286,386,486
                                                          Variant does not work on NEC's V-series, probably not on AMD CPUs

                                                ну што я говорил?!
                                                Ответить
                                              • слушай, давай вот про что говорим.

                                                сколько тактов занимает инструуция mov?
                                                Я же правильно понимаю что это зависит от наличия говна в кеше. А если его там нет, то от скорости работы памяти, наличия говна в сенс амплифаерах, открытости-закрытости ряда, короче невозможно сказать от чего это зависит?

                                                как тогда это измерить? Вроде как Intel vTune умеет, но как понять например что скорость памяти это ботлнек?

                                                есть какие-то инструменты?
                                                Ответить
                                                • Секундомер с «Алиэкспресса».

                                                  Если просто хочешь узнать на испытательном стенде, сколько тактов прошло, то ты это можешь узнать через RDTSC. Правда, я не знаю, что RDTSC покажет в многозадачной среде.

                                                  Или тебя интересует, как узнать то, от чего это зависит (наличие говна в кэше и т. п.)?
                                                  Ответить
                                                  • да

                                                    допустим, я хочу понять являетчя ли скорость мапяти ботланеком
                                                    Ответить
                                                    • питухи питуханичики
                                                      такую тему интеерсную слили
                                                      Ответить
                                                      • К этой теме серьёзно подойти нужно. Это не флуд на тему, кого попердолиуо.
                                                        Ответить
                                • Я помню K5
                                  там было написано "дизайнт вор win95"
                                  сиреневеньбкий такой
                                  Ответить
      • Чтобы не забивать байты, назначаем один раз регистру и бьём в стэк. Экономия блин, а ecx измениться не где.
        Ответить
        • Макрос Invoke вполне может принять нули. Зачем ещё класть их на стек руками?
          Ответить
            • Зачем гадать, если можно открыть сорцы и убедиться в своей глупости?
              Ответить
              • Дурашка, инвок раскрывается в пуши, пуш регистра занимает 1 байт, пуш константы < 256 занимает 2 байта, пуш остальных констант занимает 5 байт.
                Ответить
                • Сам ты дурашка, я твоя новая связная.
                  Invoke используется для удобства. Раз человек заюзал его - значит, ему важно именно удобство, а не минимализм. Если нужен минимум кода - пушайте.
                  Ответить
              • Смотри)

                ASM получим на выхлопе 20 байт
                use32
                push $80000000;68 00 00 00 80
                push $80000000;68 00 00 00 80
                push $80000000;68 00 00 00 80
                push $80000000;68 00 00 00 80

                ASM получим 11 байт
                mov ecx,$80000000;B9 00 00 00 80
                push ecx;51
                push ecx;51
                push ecx;51
                push ecx;51

                Семь раз отмерь — один отрежь, chiacorp!
                Ответить
              • С нулями теже яйца тока профиль другой)

                use32;8 байт
                push 0;6A 00
                push 0;6A 00
                push 0;6A 00
                push 0;6A 00

                use32;6 байт
                xor edi,edi;31 FF
                push edi;57
                push edi;57
                push edi;57
                push edi;57

                Чем больше push 0 тем лучше, а invoke что поставим то и пульнёт)
                Ответить
  • > GWL_WNDPROC
    Хм, так в винапи можно просто заменять обработчик событий и не регать новый класс...
    Ответить
    • полезно иногда читать msdn, правда?
      Ответить
            • Напрямую под xlib никто уже почти не говнокодит.
              Обычно говнокодят под xcb или под виджеты коих дохуя или под QT или под GTK или.. ну ты понял

              но ценность цветных книжек это не умаляет.
              Там есть еще зелененькая и розовенькая и еще всякие разные: по виджетам, по использованию иксов, по дисплей менеджерам, виндуо менеджерам итд


              вот они, мои няшечки
              https://www.librarything.com/series/The+Definitive+Guides+to+the+X+Window+System
              Ответить
              • Насколко вкурсе QT, GTK, XCB работают через XLIB?
                Чем ниже тем интересней!
                А интересно есть ниже XLIB возможность?
                Ответить
                • мне казалось что XCB это нативная реализация протокола X11, как и xlib.

                  А остальные все да: через XLIB.
                  вот стек
                  https://ru.wikipedia.org/wiki/X_Toolkit_Intrinsics#/media/File:Xlib_and_XCB_in_the_X_Window_System_graphics_stack.svg



                  ниже XLIB можно конечно.
                  Читаешь про протокол
                  https://pics.cdn.librarything.com/picsizes/a6/ea/a6ea7378b64ee14597859555667444341587343.jpg

                  и реализуешь клиента X11
                  Ответить
                  • Понятно xlib=x11.
                    Ниже работа через протокол TCP/IP. Верно?
                    С микротиком так извращался)
                    СПС нужная инфа.
                    Ответить
                    • Не обязательно TCP/IP.

                      X11 ждет каково-то стрим-ориентированного протокола.
                      Это может быть unix domain sockets на юниксах, может быть names pipes на винде, да хоть последовательный порт)


                      Вот что пишет о себе XOrg (важная, но далеко не едигнственная реализация X11 севера):


                      Xorg supports connections made using the following reliable byte-streams:
                      Local
                      On most platforms, the "Local" connection type is a UNIX-domain socket. On some System V platforms, the "local" connection types also include STREAMS pipes, named pipes, and some other mechanisms.

                      TCP/IP
                      Xorg listens on port 6000+n, where n is the display number. This connection type can be disabled with the -nolisten option (see the Xserver(1) man page for details).


                      лол, я думал беркливеые сокеты убили STREAMS 25 лет назад
                      Ответить
  • а нахера вы тут ассемблер запостили, надо было бинарный дамп запринтить.
    Ответить
    • В заголовке написанно ассемблер.
      Написали бинарный, то и закинули бы бинарный)))

      Помни, ASD_77, за тобой могут следить!
      Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8