----------------------------------------------------------------------------
czolgiem =]

niemozliwe? a jednak. winda 32bit i asembler. ciekawa sprawa. wiedza ta moze
byc przydatne podczas pisania zabezpieczen lub (s)wirusow :]  specjalnie dla
mailisty 'AsmPl'. strona listy jest pusta, warto wiec chyba dopchac tam cos.

3majcie sie

sachy/skid row+dinx project+appendix
(amiga scene coder/cracker, but who cares? :)

ps: wisicie mi piwo, stracilem na to GHOSTBUSTERS :))

tytul oryginalu: "_masta_'s Tutorial on Win95 ASM Coding Part 0"
autor oryginalu: _masta_
----------------------------------------------------------------------------

                                      -
                             -----=========-----
      -------==================================================----------
------===== _masta_: Win95 i programowanie w asemblerze, cz. 0 =====------
      -------==================================================----------

                            --==WPROWADZENIE==--

Czesc. Po fiasku poszukiwan jakiegos tutorka (podrecznika? :) o programowaniu
w asemblerze pod 32-bitowymi wINDOWSami, zdecydowalem sie napisac jakis
wlasny. Mam nadzieje, ze bedzie to pierwszy z jakiejs malej serii tutorkow
na ten temat.


                        --==CO JEST NAM POTRZEBNE?==--

        1. Mozg ;)
        2. Komputer oparty na procku intela z Win95 na pokladzie
        3. TASM 5.0 (z Tlink'iem, bibliotekami, itp.)
        4. API-Reference (Win32.HLP) - rozpiska windowego API

        ---> wiekszosc z tych rzeczy moze byc znaleziona na:
             lRD LG'$ ft$t wRL F RAcKG (pisownia oryginalna :)
             [>Cracking.home.ml.org<]


Zakladam, ze posiadasz przynajmniej podstawowa wiedze o asemblerze, ktora
kazdy cracker, koder (maniak predkosci!) powinien miec.


  -==CO TAKIEGO SPECJALNEGO JEST W PROGRAMOWANIU ASEMBLERZE POD WIN95?==--

Glowna roznica polega na wykorzystywaniu funkcji API oraz braku mozliwosci
uzycia przerwan (do ktorych przyzwyczajeni bylismy pod dosem - przyp. tlum.).
Parametry funkcji API sa wrzucane PUSHami na stos przed wywolaniem funkcji.
Odbywa sie w sposob zblizony sposobu wywolywania funkcji w jezyku C (ostatni
parametr wedruje na stos jako pierwszy, przedostatni jako drugi, itd.).
Rowniez male i duze litery musza byc uzywane we wlasciwy sposob:

       - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
       Dobrze: "MessageBoxA" <---------------> ZLE!!!: "messageboxa"
       - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



                --==CZEGO NAUCZYMY SIE W TYM TUTORZE?==--

Na poczatek cos prostego, najpopularniejszy program w tej czesci galaktyki:

                      "Hello World!"  (I'm Jan B.) :-]=



                         --==HELLO WORLD !!==--


Coz, sa to te dwa slowa, o ktorych KAZDY koder napewno slyszal :)

Na poczatku powinnismy zastanowic sie, w jaki sposob chcemy nasz boski napis
pokazac na ekranie. Uzyjemy wiec MessageBox'a, a jako ze pracujemy w Win95,
uzyjemy ich pelnej, 32-bitowej mocy: "MessageBoxA".
Poszukajmy wiec "MessageBoxA" w naszej rozpisce: Api-Reference (Win32.hlp).
Powinnismy natknac sie na cos takiego:

---------------------------------------------------------------------
   int MessageBox(

       HWND  hWnd,         // handle of owner window
       LPCTSTR  lpText,    // address of text in message box
       LPCTSTR  lpCaption, // address of title of message box
       UINT  uType         // style of message box
      );
---------------------------------------------------------------------

Zastanowmy sie co umiescic na stosie jako parametry wywolania.

- Jako, ze nie mamy okna ktore wywolaloby nasze okno (okno macierzyste?),
  ustawimy "hWnd" na zero.

- "lpText" bedzie offsetem do miejsca, gdzie nasz tekst jest przechowywany.

- "lpCaption" ---> offset od tytulu okna (ang. Caption)

- "uType" rowniez ustawimy jako "0" also, co oznacza "normalny" MessageBox ze
  slicznym przyciskiem OK (typ: MB_OK)

Czas wiec na dlugo oczekiwany przez nas kawalek kodu :))

;-------------------------------START--------------------------tut.asm

                              ; ustawienie opcji dla asemblera
.386P
Locals
jumps

.Model Flat ,StdCall
mb_ok     equ 0               ;MB_OK przypisujemy wartosc "0"
hWnd      equ 0
lpText    equ offset text     ;wskaznik do tekstu
lpCaption equ offset caption  ;wskaznik do tytulu MessageBox'a


; deklaracja wszystkich urzytych funkcji API

extrn     ExitProcess     : PROC     ;procedura zakonczenia procesu
extrn     MessageBoxA     : PROC     ;procedura wyswietlenia MessageBox'a

; tutaj zaczynaja sie nasze dane

.Data
text     db "Hello World!",13,10 ; pierwsza linia tekstu (+ znaki nowej linii)
         db "_masta_ i sachy pozdrawiaja kazdego, kto czyta tego tuta!",0
                                ; druga linia, zakonczona zerem (ASCIIZ :)

caption  db "Hello!",0 ; Tytul okienka, zakonczonu zerem (ACSIIZ jak w C)


; tutaj zaczyna sie nasz kod :)

.Code
Main:
                                ; pozdrowmy swiat :))

        push mb_ok              ;wartosc uType - na stos
        push lpCaption          ;wskaznik do tytulu okna - na stos
        push lpText             ;wskaznik do naszego tekstu - ma stos
        push hWnd               ;'uchwyt' okna nadrzednego - na stos
        call MessageBoxA        ;wywolanie "MessageBoxA"
        CALL ExitProcess        ;zakonczenie programu

End Main                        ;koniec kodu, Main jest punktem rozpoczecia
                                ;programu

;-----------------------------------END------------------------tut.asm

;----------------------------------START-----------------------make.bat

tasm32 /mx /m3 /z /q tut
tlink32 -x /Tpe /aa /c tut,tut,, import32.lib

;-----------------------------------END------------------------make.bat

Coz, jak widac, nie trzeba wiele. Mysle, ze jednak jest to dobry start do
rozpoczecia kodowania w asemblerze pod Win95.


                            --==ZAKONCZENIE==--


To jest moj pierwszy, ale na pewno nie ostatni tutorek o programowaniu w
asemblerze pod (nad? :) systemem windows.

Ok, mam nadzieje zobaczymy sie w kolejnym tutorze :)


                            --==POZDROWIENIA==--

_masta_:
VucoeT (Translator [ :) ]), |Caligo| (kewl Page), fravia (best on the web),
stone (for the inspiration), not4you, fungus, |Quest|,
Silvio (where are you ?), Vantmas and every Cracker on this planet ...

sachy:
_masta_ - cool thing, thx for permission! :)
asmpl, crackpl, wszystkich czytajacych tego tutorka oraz ludzi ze sceny:
C=64/Amiga/Atari/PC



  -------=====================================================--------
------======everybody was a lamer, before they become ELITE======-------
  -------=====================================================--------
                          -----=========-----
                                   -

