mirror of
https://github.com/stasenso/SHA256.git
synced 2026-06-26 21:32:43 +03:00
Перешёл на masm
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
.vscode/tasks.json
|
.vscode/tasks.json
|
||||||
main.obj
|
main.obj
|
||||||
main.exe
|
main.exe
|
||||||
|
sha-256.obj
|
||||||
|
.vscode/tasks.json.etalon
|
||||||
|
|||||||
@@ -14,6 +14,42 @@ IncludeLib kernel32.lib
|
|||||||
;IncludeLib debug.lib
|
;IncludeLib debug.lib
|
||||||
|
|
||||||
.DATA
|
.DATA
|
||||||
|
;Макросы
|
||||||
|
MAKELANGID macro p:REQ,s:REQ ;Макрос создающий идентификатор языка
|
||||||
|
m$__langid = (s SHL 10) or p ;
|
||||||
|
EXITM <m$__langid> ;
|
||||||
|
endm
|
||||||
|
; -------------------------------------------------------------------------
|
||||||
|
DU MACRO name, string
|
||||||
|
name PROC
|
||||||
|
DU1 string
|
||||||
|
name ENDP
|
||||||
|
ENDM
|
||||||
|
; -------------------------------------------------------------------------
|
||||||
|
DU1 MACRO string
|
||||||
|
LOCAL bslash
|
||||||
|
bslash=0
|
||||||
|
IRPC c,<string>
|
||||||
|
IF bslash EQ 0
|
||||||
|
IF '&c' EQ "\" ;;управляющая последовательность символов
|
||||||
|
bslash=1
|
||||||
|
ELSEIF '&c' GT 127
|
||||||
|
DB ('&c'- 0B0h), 4 ;;кириллица
|
||||||
|
ELSE
|
||||||
|
DW '&c' ;;латиница
|
||||||
|
ENDIF
|
||||||
|
ELSE
|
||||||
|
bslash=0
|
||||||
|
IF '&c' EQ "n" ;; \n = новая строка
|
||||||
|
DW 0Dh
|
||||||
|
ELSEIF '&c' EQ "r";; \r = возврат каретки
|
||||||
|
DW 0Ah
|
||||||
|
ENDIF
|
||||||
|
ENDIF
|
||||||
|
ENDM
|
||||||
|
DW 0
|
||||||
|
ENDM
|
||||||
|
; -------------------------------------------------------------------------
|
||||||
ClassName DB "MainWinClass",0
|
ClassName DB "MainWinClass",0
|
||||||
szAppName DB "SDI Application",0
|
szAppName DB "SDI Application",0
|
||||||
MenuName DB "FirstMenu",0
|
MenuName DB "FirstMenu",0
|
||||||
@@ -21,13 +57,20 @@ szFileNew DB "You selected 'New'.",0
|
|||||||
szFileOpen DB "You selected 'Open'.",0
|
szFileOpen DB "You selected 'Open'.",0
|
||||||
szHelpAbout DB "You selected 'About'.",0
|
szHelpAbout DB "You selected 'About'.",0
|
||||||
|
|
||||||
|
DU ButtonClassName,<button>
|
||||||
|
|
||||||
|
DU ButtonText,<Запуск>
|
||||||
|
|
||||||
|
|
||||||
.DATA?
|
.DATA?
|
||||||
hInstance HINSTANCE ?
|
hInstance HINSTANCE ?
|
||||||
CommandLine LPSTR ?
|
CommandLine LPSTR ?
|
||||||
hMenu HMENU ?
|
hMenu HMENU ?
|
||||||
|
hwndButton HWND ?
|
||||||
|
|
||||||
.CONST
|
.CONST
|
||||||
IDM_FILE_NEW EQU 1
|
IDM_FILE_NEW EQU 1
|
||||||
IDM_FILE_OPEN EQU 2
|
IDM_FILE_OPEN EQU 2
|
||||||
IDM_HELP_ABOUT EQU 3
|
IDM_HELP_ABOUT EQU 3
|
||||||
IDM_FILE_EXIT EQU 4
|
IDM_FILE_EXIT EQU 4
|
||||||
|
ButtonID equ 5
|
||||||
|
|||||||
@@ -13,10 +13,10 @@ Start:
|
|||||||
Invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
|
Invoke WinMain, hInstance, NULL, CommandLine, SW_SHOWDEFAULT
|
||||||
Invoke ExitProcess,EAX
|
Invoke ExitProcess,EAX
|
||||||
WinMain Proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
|
WinMain Proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
|
||||||
Local wc:WNDCLASSEX
|
Local wc:WNDCLASSEXW
|
||||||
Local msg:MSG
|
Local msg:MSG
|
||||||
Local hwnd:HWND
|
Local hwnd:HWND
|
||||||
MOV wc.cbSize, SizeOf WNDCLASSEX
|
MOV wc.cbSize, SizeOf WNDCLASSEXW
|
||||||
MOV wc.style, CS_HREDRAW or CS_VREDRAW
|
MOV wc.style, CS_HREDRAW or CS_VREDRAW
|
||||||
MOV wc.lpfnWndProc, Offset WndProc
|
MOV wc.lpfnWndProc, Offset WndProc
|
||||||
MOV wc.cbClsExtra,NULL
|
MOV wc.cbClsExtra,NULL
|
||||||
@@ -31,10 +31,13 @@ Local hwnd:HWND
|
|||||||
MOV wc.hIconSm,0
|
MOV wc.hIconSm,0
|
||||||
Invoke LoadCursor, NULL, IDC_ARROW
|
Invoke LoadCursor, NULL, IDC_ARROW
|
||||||
MOV wc.hCursor,EAX
|
MOV wc.hCursor,EAX
|
||||||
Invoke RegisterClassEx, addr wc
|
Invoke RegisterClassExW, addr wc
|
||||||
Invoke LoadMenu, hInst, Offset MenuName
|
.if eax==NULL
|
||||||
|
Invoke MessageBox, NULL,ADDR szHelpAbout, Offset szAppName, MB_OK
|
||||||
|
.endif
|
||||||
|
Invoke LoadMenuW, hInst, Offset MenuName
|
||||||
MOV hMenu,EAX
|
MOV hMenu,EAX
|
||||||
Invoke CreateWindowEx, WS_EX_CLIENTEDGE, ADDR ClassName, ADDR szAppName,\
|
Invoke CreateWindowExW, WS_EX_CLIENTEDGE, Offset ClassName, Offset szAppName,\
|
||||||
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,\
|
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,\
|
||||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, hMenu,\
|
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, hMenu,\
|
||||||
hInst, NULL
|
hInst, NULL
|
||||||
@@ -42,10 +45,10 @@ Local hwnd:HWND
|
|||||||
Invoke ShowWindow, hwnd, SW_SHOWNORMAL
|
Invoke ShowWindow, hwnd, SW_SHOWNORMAL
|
||||||
Invoke UpdateWindow, hwnd
|
Invoke UpdateWindow, hwnd
|
||||||
.While TRUE
|
.While TRUE
|
||||||
Invoke GetMessage, ADDR msg, NULL, 0, 0
|
Invoke GetMessageW, ADDR msg, NULL, 0, 0
|
||||||
.Break .If (!EAX)
|
.Break .If (!EAX)
|
||||||
Invoke TranslateMessage, ADDR msg
|
Invoke TranslateMessage, ADDR msg
|
||||||
Invoke DispatchMessage, ADDR msg
|
Invoke DispatchMessageW, ADDR msg
|
||||||
.EndW
|
.EndW
|
||||||
MOV EAX, msg.wParam
|
MOV EAX, msg.wParam
|
||||||
RET
|
RET
|
||||||
@@ -55,15 +58,30 @@ WndProc Proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
|
|||||||
Invoke PostQuitMessage, NULL
|
Invoke PostQuitMessage, NULL
|
||||||
.ElseIf uMsg==WM_COMMAND
|
.ElseIf uMsg==WM_COMMAND
|
||||||
MOV EAX,wParam
|
MOV EAX,wParam
|
||||||
.If AX==IDM_FILE_NEW
|
.if lParam==0
|
||||||
Invoke MessageBox, NULL, ADDR szFileNew, Offset szAppName, MB_OK
|
.If AX==IDM_FILE_NEW
|
||||||
.ElseIf AX==IDM_FILE_OPEN
|
Invoke MessageBox, NULL, ADDR szFileNew, Offset szAppName, MB_OK
|
||||||
Invoke MessageBox, NULL, ADDR szFileOpen, Offset szAppName, MB_OK
|
.ElseIf AX==IDM_FILE_OPEN
|
||||||
.ElseIf AX==IDM_HELP_ABOUT
|
Invoke MessageBox, NULL, ADDR szFileOpen, Offset szAppName, MB_OK
|
||||||
Invoke MessageBox, NULL,ADDR szHelpAbout, Offset szAppName, MB_OK
|
.ElseIf AX==IDM_HELP_ABOUT
|
||||||
.Else
|
Invoke MessageBox, NULL,ADDR szHelpAbout, Offset szAppName, MB_OK
|
||||||
Invoke DestroyWindow, hWnd
|
.Else
|
||||||
.EndIf
|
Invoke DestroyWindow, hWnd
|
||||||
|
.EndIf
|
||||||
|
.ELSE
|
||||||
|
.IF ax==ButtonID ;Если нажата кнопка, то
|
||||||
|
shr eax,16 ;сдвигаем EAX на 4 бита вправо, чтобы поместить в AX значение верхнего слова wParam
|
||||||
|
.IF ax==BN_CLICKED
|
||||||
|
invoke MessageBoxExW, hWnd, ADDR ButtonText, ADDR ButtonText,MB_OK,MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT)
|
||||||
|
.ENDIF
|
||||||
|
.EndIf
|
||||||
|
.ENDIF
|
||||||
|
.ELSEIF uMsg==WM_CREATE
|
||||||
|
invoke CreateWindowExW,NULL, Offset ButtonClassName,Offset ButtonText,\
|
||||||
|
WS_CHILD or WS_VISIBLE or BS_DEFPUSHBUTTON,\
|
||||||
|
75,70,140,25,hWnd,ButtonID,hInstance,NULL
|
||||||
|
mov hwndButton,eax
|
||||||
|
|
||||||
.Else
|
.Else
|
||||||
Invoke DefWindowProc, hWnd, uMsg, wParam, lParam
|
Invoke DefWindowProc, hWnd, uMsg, wParam, lParam
|
||||||
RET
|
RET
|
||||||
|
|||||||
+35
@@ -0,0 +1,35 @@
|
|||||||
|
.386
|
||||||
|
.model flat,stdcall
|
||||||
|
option casemap:none
|
||||||
|
include include\windows.inc
|
||||||
|
include include\user32.inc
|
||||||
|
include include\kernel32.inc
|
||||||
|
includelib user32
|
||||||
|
includelib kernel32
|
||||||
|
|
||||||
|
.data
|
||||||
|
AppName db "DLL Skeleton",0
|
||||||
|
HelloMsg db "Hello, you're calling a function in this DLL",0
|
||||||
|
LoadMsg db "The DLL is loaded",0
|
||||||
|
UnloadMsg db "The DLL is unloaded",0
|
||||||
|
ThreadCreated db "A thread is created in this process",0
|
||||||
|
ThreadDestroyed db "A thread is destroyed in this process",0
|
||||||
|
.code
|
||||||
|
DllEntry proc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD
|
||||||
|
.if reason==DLL_PROCESS_ATTACH
|
||||||
|
invoke MessageBox,NULL,addr LoadMsg,addr AppName,MB_OK
|
||||||
|
.elseif reason==DLL_PROCESS_DETACH
|
||||||
|
invoke MessageBox,NULL,addr UnloadMsg,addr AppName,MB_OK
|
||||||
|
.elseif reason==DLL_THREAD_ATTACH
|
||||||
|
invoke MessageBox,NULL,addr ThreadCreated,addr AppName,MB_OK
|
||||||
|
.else ; DLL_THREAD_DETACH
|
||||||
|
invoke MessageBox,NULL,addr ThreadDestroyed,addr AppName,MB_OK
|
||||||
|
.endif
|
||||||
|
mov eax,TRUE
|
||||||
|
ret
|
||||||
|
DllEntry Endp
|
||||||
|
TestHello proc
|
||||||
|
invoke MessageBox,NULL,addr HelloMsg,addr AppName,MB_OK
|
||||||
|
ret
|
||||||
|
TestHello endp
|
||||||
|
End DllEntry
|
||||||
Reference in New Issue
Block a user