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

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

include 'win32ax.inc'

  _title db 'stackvar',0
  _class db '#32770',0

entry $
  sub esp,32
  mov esi,esp
  xor edi,edi
  mov ecx,$80000000
  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 [esi],eax
  invoke SetWindowLong,ebx,GWL_USERDATA,esi
  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
  mov eax,[esp+4]
  invoke GetWindowLong,eax,GWL_USERDATA
  pop edx
  push dword [eax]
  push edx
  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 )

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

  • Добро пожаловать в программирование под Windows на ассемблере!
    Ответить
    • Унылая прикладнуха, даже соглашения о вызовах скрыты в invoke... Суть асма не раскрыта.
      Ответить
      • invoke для удобства там ничего интересного лишь много пуш и 1 кал)
        Какая суть требуется? Можно делать то что на более высоком уровне не доступно. Даже при использование вставок асма конструкция подпрограмм неизменна.
        Ответить
        • > много пуш
          А ну да, 32-битка же.

          > какая суть требуется
          Делать то, что на более высоком уровне недоступно и/или медленно. А для окошек есть всякие C#.
          Ответить
    • Ну вот разве что конструкция на 39-41 строках интересна.
      Ответить
        • Ты сунул параметр под адрес разврата текущей функции и джумпнул на другую, вместо call. Наверное предсказателю развратов это не понравится.

          Именно поэтому я за "fastcall".
          Ответить
          • Работает от xp до 10. Выкинули ненужные возвраты стэк сбалансирован. В fastcall и не такое возможно)
            Ответить
          • Предсказателю развратов похуй на это. Его можно разбалансировать только через call+pop или push+ret вроде.
            Ответить
      • приподнял ковер, насрал туда, и закрыл обратно как ничего не было
        Ответить
  • > переменные в стеке
    Прямо как у взрослых конпеляторов!
    Ответить

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

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

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


    8