Mistäs löytyisi hyvä assembleri/ ja kehitys ympäristö windows 7:kalle?
Miksi haluaisit kirjoittaa assemblyä windows 7:lla?
Koska kinostaa. Ja jotain pikkusia perus juttuja ajattelin tehä, en uutta battlefieldiä.
Hyvästä en tiedä, mutta helposti ainakin pääsee kokeilemaan GNU Assemblerilla, kun vain asentaa tavallisen GCC-pohjaisen C++-kehitysympäristön (Dev-C++, Code::Blocks tms.) ja luo projektiin .S-päätteisen tiedoston. Tässä on sekin hyvä puoli, että saattaa saada jopa jotain järkevää aikaan, jos käyttää C++:aa perusasioihin ja tekee konekielellä vain yksittäisiä funktioita.
MASM on suosittu, vaikkakin mielestäni huono, valinta assembleriksi Windows-ympäristöön. Netistä löytyy paljon englanninkielisiä oppaita. Voin suositella Iczelionin opassarjaa, jos Win32-ohjelmien koodaaminen MASMilla kiinnostaa. MASMin huonoja puolia ovat esimerkiksi aloittelijaa hämmentävä epäjohdonmukainen syntaksi sekä tuen puuttuminen uusille käskykannoille.
NASM on hyvä valinta, jos suunnittelet ohjelmoivasi myös Linuxille. NASM on suosituin assembleri Linux-ympäristössä, ja sille löytyy paljon oppaita sekä jopa ajan tasalla olevia kirjoja. Mikään ei estä käyttämästä NASMia Windowsissa, mutta oppaita ja tukea voi olla vaikea löytää. NASM on suunniteltu ensisijaisesti objektitiedostojen assemblointiin, joten tarvitset linkkerin suoritettavien binäärien luomiseen.
FASM on oma suosikkini, ja näistä kolmesta minimaalisin ja sisältää "tehokkaimmat" macrot, joilla on mahdollista toteuttaa esimerkiksi tuki uusille tiedostoformaateille tai vaikkapa käännösaikainen SHA-512 algoritmi. FASMilla on helppo hallita syntyvää binääriä tavun tarkkuudella, minkä takia sitä käytetään laajasti mm. käyttöjärjestelmien koodauksessa. Esimerkiksi suomalaisalkuinen MenuetOS sekä siitä forkattu KolibriOS on kirjoitettu kokonaan FASMilla. FASM toimii myös Linuxissa, Macissa ja DOSissa, mutta käyttö Windowsissa on yleisintä. Aloittelijalle alkuunpääseminen voi olla hieman hankalaa, koska oppaita on niukasti ja FASMin mukana tuleva dokumentaatio on suunnattu kokeneille assembly-ohjelmoijille.
FASMin mukana tulee alkeellinen kehitysympäristö, joka on peruskoodaukseen ihan riittävä. MASMin ja NASMin kanssa voit käyttää esimerkiksi WinAsm Studiota tai RadASMia. Myös pelkällä Notepad++:lla ja komentorivillä pärjää. Debuggeriksi suosittelen OllyDBG:tä (erittäin hyvä osata, jos haluat joskus kräkätä Windows-binääreitä).
Lisäys:
Metabolix kirjoitti:
Hyvästä en tiedä, mutta helposti ainakin pääsee kokeilemaan GNU Assemblerilla, kun vain asentaa tavallisen GCC-pohjaisen C++-kehitysympäristön (Dev-C++, Code::Blocks tms.) ja luo projektiin .S-päätteisen tiedoston. Tässä on sekin hyvä puoli, että saattaa saada jopa jotain järkevää aikaan, jos käyttää C++:aa perusasioihin ja tekee konekielellä vain yksittäisiä funktioita.
Kokeilemiseen ja yksittäisten funktioiden kirjoittamiseen GAS on hyvä. GAS kuitenkin tuntuu olevan tarkoitettu tietokoneen käytettäväksi, eikä sillä käsin koodaaminen tai kokonaisten ohjelmien tekeminen ole mukavaa. GASista saa siedettävämmän vaihtamalla AT&T-syntaksin Inteliin:
AT&T, GASin oletus: mov %fs:4(%eax, %ebx, 8), %ecx Intel: .intel-syntax noprefix mov ecx, fs:[eax + ebx * 8 + 4]
Kiitos Deffi ja Metabolix. Taidan tehä aluksi tollein c++:n seassa, ja sitten myöhemmin siirtyä FASMiin.
Ääni myöskin FASM:lle. Kannattaa myös hyödyntää FASM:n keskustelupalstaa, jos ongelmia ilmenee. Ainakin silloin kun itse tuli vielä assemblyä harrastettua paikka oli mitä mainioin. Näyttää myös Fresh IDE FASM:lle kehittyneen, kannattaa käydä ainakin vilkasemassa video kyseisestä projektista.
Deffi kirjoitti:
MASM on suosittu, vaikkakin mielestäni huono, valinta assembleriksi Windows-ympäristöön. Netistä löytyy paljon englanninkielisiä oppaita. Voin suositella Iczelionin opassarjaa, jos Win32-ohjelmien koodaaminen MASMilla kiinnostaa. MASMin huonoja puolia ovat esimerkiksi aloittelijaa hämmentävä epäjohdonmukainen syntaksi sekä tuen puuttuminen uusille käskykannoille.
JWasm on MASM yhteensopiva ja tukee uudempia käskykantoja.
Go tools voisi myös olla kokeilemisen arvoinen vaihtoehto.
Aihe on jo aika vanha, joten et voi enää vastata siihen.