MASM32: Deklarowanie funkcji w kodzie maszynowym pod Windows
Manna5
Artykuł wyjaśnia prostą metodę dodawania do programu windowsowego w MASM32 procedury/funkcji w kodzie maszynowym.
***
Oto przykład:
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
.data ;Miejsce na tekst do msgboxa
ResultMessage DB "0"
DB 0
.code
start:
MOV AL,08h ;Cyfra 8, zaraz zmienimy na jej kod ASCII
CALL NumberASCII ;Podajemy argument i wywołujemy
MOV ResultMessage,AL ;Odbieramy wartość zwracaną i ją zapisujemy
PUSH 0
PUSH OFFSET ResultMessage
PUSH OFFSET ResultMessage
PUSH 0
CALL MessageBoxA ;Prezentujemy wyniki
PUSH 0
CALL ExitProcess ;Kończymy program
NumberASCII: ;Prezentacja cyfry w kodzie ASCII
DB 04h,30h ;instrukcja "add al,48d", możesz dać ich więcej
RET ;Wychodzimy z funkcji
end start ;Koniec kodu
Program wyświetla okienko z cyfrą 8.
Większość kodu aplikacji tłumaczą komentarze, a na ogół definicja funkcji w kodzie maszynowym wygląda następująco:
MyRawProcedure:
DB 90h,90h ;Instrukcje jako HEX rozdzielane przecinkami, tutaj dwa NOP-y
RET
Ważne jest aby taka definicja znalazła się w sekcji .code
, a nie .data
i żeby odpowiednio ją obkomentować by później pamiętać co ten kod robi i tyle. Powinienem może napisać tu więcej, ale metoda jest tak prosta, że nie mam o czym.