... Masm Tutorial #1 ...

Pulse Reversing Force

Този туториал е първият от поредицата за MASM на Pulse Team, така че не очаквайте много :). Ще Ви запозная с основните
директиви в MASM, както и как да направите прост MessageBox. Ще коментирам написания код отдолу за да Ви стане ясно 
всичко. Аз използвам MASM 8, който лесно можете да си намерите из нета. След като го инсталирате отворете asmbas.asm 
(който идва с този zip) с Qedit.exe. Като за начало трябва да знаете, че коментарът във всеки асемблер (вкл. и MASM) се 
означава с точка и запетая - ";". Ако имате проблеми с асемблер инструкциите, моля вижте този туториал. 
Ами сега остава само да разгледате следния код. В бяло е самият код, а в сиво коментарът:
---------------------------------------------------------------------------------------------------------
  ; Следните 3 реда са задължителни:
 
  .386
  ; Показва на асемблера, че трябва да се използват 80386 инструкции.
  ; Възможностите са: .386 .486 .586 .386p .486p .586p

  .model flat, stdcall
  ; .model показва какъв модел на паметта да се използва.
  ; За win32 програми трябва да се ползва flat модела.
  ; StdCall е вида на викане на функциите.

  option casemap :none
  ; option casemap :none значи, че при компилирането компилатора ще прави
  ; разлика между малки и главни букви 
 
  include \masm32\include\windows.inc  
  include \masm32\include\user32.inc   
  include \masm32\include\kernel32.inc
  ; include служи за вмъкване на код от друг файл на 
  ; мястото където е написана директивата

  includelib \masm32\lib\user32.lib    
  includelib \masm32\lib\kernel32.lib  
  ; includelib служи за вмъкване на код от библиотека на диска на
  ; мястото където е написана директивата
 
  ; В MASM кода се разделя на няколко секции - .data, .data?, .code и .const
  .data?
  ; Тук се пишат се неинициализираните променливи (без начална стойност)
 
  .const
  ; Тук се пишат константите    

  .data
  ; Тук се пишат инициализираните променливи (с начална стойност)

  ; В асемблера има няколко вида променливи (квадратните скоби значат допълнителни параметри):
  ; Име db число[,число] - Define Byte  - Дефинира байт - число от 0 до 255 (char)
  ; Име dw число[,число] - Define Word  - Дефинира дума - 2 байта (short int)
  ; Име dd число[,число] - Define Dword - Дефинира двойна дума - 4 байта (int)
  ; Име dq число[,число] - Define Qword - Дефинира четворна дума - 8 байта (long int)
 
  ; Ето няколко нулево терминирани низове/масив от char елементи (нулата показва къде свършва низа)
  message  db "Is 2+2=4?",0
  message1 db "Well done ;]",0
  message2 db "You need more lessons man ;]",0
  caption  db "MasmTut #1",0
 
  .code
  ; Тук се пише кода на програмата, но той трябва да е задължително в label (като този на долният ред)
  
  start:
  ; Викането на API функции с StdCall става като се push-ват параметрите на функцията в обратен ред и се
  ; call-не самата функция. Но за улеснение на потребителя спомага командата invoke.
  ; Тя има следният синтаксис: invoke функция[,аргумент]
  ; Указателите в MASM се означават с 'offset'
 
  invoke MessageBox,0,offset message,offset caption,MB_ICONQUESTION + MB_YESNO
  ; Два или повече параметри се обидиняват с плюс (+).
  ; Резултатът от API функция се връща в регистъра EAX
 
  cmp eax, IDYES
  ; Сравнява резултатът върнат от MessageBoxA (върнат в eax) с константата IDYES, която 
  ; означава че потребителя се натиснал Yes
 
  je good
  ; Ако е така скача на label-а 'good', а ако не - продължава
 
  invoke MessageBox,0,offset message2,offset caption,MB_OK
  invoke ExitProcess,0
 
  ; Потребителят не е натиснал Yes.
  ; Програмата показва, че той е умствено изостанал и излиза ;)
 
  good:
 
  invoke MessageBox,0,offset message1,offset caption,MB_OK
  invoke ExitProcess,0
 
  ; Потребителят е натиснал Yes.
  ; Програмата показва, че Айнщайн бледнее пред умствените възможности на потребителя и излиза ;)

  end start
  ; Край на label-a и на програмата :) 
 
---------------------------------------------------------------------------------------------------------
Забравих да спомена, че асемблер файловете са с разширение *.asm а include файловете с *.inc.
Сега трябва изберете Project->Build All от менюто на Qedit.exe. Следващият туториал ще бъде за keygen,
така че ако Ви интересува проверете сайта ни.
---------------------------------------------------------------------------------------------------------
    greetz goin to :
    ..shade.........
    ..dim_cr........
    ..pumqara.......
    ..nre...........
    ..sometimes.....
    ..buko..........
    ..jeux..........
 
 
---------------------------------------------------------------------------------------------------2k3---
  Дата  : 14..2оо3
  Автор : plux ~ PuLSe
  Поща  : p.l.u.x@mail.bg
  Сайт  : www.pulse-team.tk