mirror of
https://github.com/stasenso/SHA256.git
synced 2026-06-27 05:42:43 +03:00
Исправно компилируется в DLL, но нет соглашения о вызовах
This commit is contained in:
+84
@@ -0,0 +1,84 @@
|
||||
include includes\win64a.inc
|
||||
.code
|
||||
WinMain proc
|
||||
local msg:MSG
|
||||
xor ebx,ebx ;rbx = 0
|
||||
mov esi,IMAGE_BASE ; дескриптор нашей программы
|
||||
mov eax,10027h ; дескриптор иконки
|
||||
mov edi,offset ClassName; Имя нашего класса окна
|
||||
; заполнение структуры wc и регистрация класса
|
||||
push rax ;hIconSm дескриптор малой иконки
|
||||
push rdi ;lpszClassName Имя класса окна
|
||||
push rbx ;lpszMenuName меню
|
||||
push COLOR_WINDOW;hbrBackground Цвет фона
|
||||
push 10003h ;hCursor дескриптор курсора
|
||||
push rax ;hIcon дескриптор иконки
|
||||
push rsi ;hInstance дескриптор модуля
|
||||
push rbx ;cbClsExtra & cbWndExtra
|
||||
pushaddr WndProc ;lpfnWndProc
|
||||
;Адрес процедуры окна, ответственной за окна, создаваемых на основе этого класса
|
||||
push sizeof WNDCLASSEX;cbSize & style
|
||||
;Стиль окон, создаваемых из этого класса. Вы можете
|
||||
;комбинировать несколько стилей вместе, используя оператор "or".
|
||||
invoke RegisterClassEx,esp ;rsp = addr WNDCLASSEX
|
||||
;регистрация нашего класса окна
|
||||
;После регистрации класса окна, мы должны вызвать CreateWindowEx,
|
||||
;чтобы создать наше окно, основанное на этом классе
|
||||
;--------------------------+
|
||||
; creating the main window |
|
||||
;--------------------------+
|
||||
push rbx ;lрParam: Опциональный указатель на структуру данных,
|
||||
;передаваемых окну. Это используется окнами MDI, чтобы передать структуру
|
||||
;CLIENTCREATESTRUCT. Обычно этот параметр установлен в NULL, означая, что
|
||||
;никаких данных не передается через CreateWindow(). Окно может получать значение
|
||||
;этого параметра через вызов функции GetWindowsLong.
|
||||
push rsi ;rsi=400000h hInstance: дескриптор программного модуля, создающего окно
|
||||
shl esi,9 ;rsi=CW_USEDEFAULT
|
||||
push rbx ;hMenu: дескриптор меню окна. NULL - если будет использоваться меню,
|
||||
;определенное в классе окна. Взгляните на код, объясненный ранее, член структуры
|
||||
;WNDCLASSEX lрszMenuName. Он определяет меню "по умолчанию" для класса окна.
|
||||
;Каждое окно, созданное из этого класса будет иметь тоже меню по умолчанию, до
|
||||
;тех пор пока вы не определите специально меню для какого-то окна, используя
|
||||
;параметр hMenu. Этот параметр - двойного назначения. В случае, если ваше окно
|
||||
;основано на предопределенном классе окна, оно не может иметь меню. Тогда hMenu
|
||||
;используется как ID этого контрола. Windows может определить действительно ли
|
||||
;hMenu - это дескриптор меню или же ID контрола, проверив параметр lрClassName. Если
|
||||
;это имя предопределенного класса, hMenu - это идентификатор контрола. Если нет,
|
||||
;это дескриптор меню окна
|
||||
push rbx ;hWndParent: дескриптор родительского окна (если существует). Этот
|
||||
;параметр говорит Windows является ли это окно дочерним (подчиненным) другого
|
||||
;окна, и, если так, кто родитель окна. Заметьте, что это не родительско-дочерние
|
||||
;отношения в окна MDI (multiрly document interface). Дочерние окна не ограничены
|
||||
;границами клиентской области родительского окна. Эти отношения нужны для
|
||||
;внутреннего использования Windows. Если родительское окно уничтожено, все
|
||||
;дочерние окна уничтожаются автоматически. Это действительно просто. Так как в
|
||||
;нашем примере всего лишь одно окно, мы устанавливаем этот параметр в NULL
|
||||
push rsi ;X-координата верхнего левого угла окна.
|
||||
;Обычно эти значения равны CW_USEDEFAULT, что позволяет Windows решить, куда
|
||||
;поместить окно. nWidth, nHeight: Ширина и высота окна . Вы можете также использовать
|
||||
;CW_USEDEFAULT, чтобы позволить Windows выбрать соответствующую ширину и высоту
|
||||
;для вас
|
||||
push rsi ;Y-координата верхнего левого угла окна
|
||||
push rsi ;ширина окна в пикселях
|
||||
push rsi ;высота окна в пикселях
|
||||
sub esp,20h
|
||||
invoke CreateWindowEx,0,\;dwExStyle: Дополнительные стили окна
|
||||
edi,\;lpClassName: Адрес ASCIIZ строки, содержащей имя класса окна
|
||||
edi,\;lpWindowName: Адрес ASCIIZ строки, содержащей имя окна
|
||||
WS_OVERLAPPEDWINDOW or WS_VISIBLE
|
||||
lea edi,msg
|
||||
@@: invoke GetMessage,edi,NULL,0,0
|
||||
invoke DispatchMessage,edi
|
||||
jmp @b
|
||||
WinMain endp
|
||||
;----------------------+
|
||||
; the window procedure |
|
||||
;----------------------+
|
||||
WndProc:cmp edx,WM_DESTROY
|
||||
je wmDESTROY
|
||||
jmp DefWindowProc;все сообщения, не обрабатываемые в функции
|
||||
;WndProc, направляются на обработку по умолчанию
|
||||
wmDESTROY: invoke ExitProcess,NULL; выходим из программы
|
||||
.data
|
||||
ClassName db "Win64 Iczelion's lesson #3a: Simple windows",0
|
||||
end
|
||||
Reference in New Issue
Block a user