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.

0 komentarzy