Assembly-kieli ja x86-tason järjestelmäohjelmointi · Oppitunti

Windows API:n käyttö

Tutustukaa Windows-käyttöjärjestelmän kanssa kommunikointiin sen API:n kautta ja ymmärtäkää järjestelmätason toimintojen mekanismit.

Oppitunti 3/411 vaihetta

Windows API:n käyttö on ilmainen Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssilla on yhteensä 4 oppituntia.

Johdatus Windows APIin (WinAPI)

Windows API eli WinAPI on joukko funktioita, joita ohjelmat käyttävät ollakseen vuorovaikutuksessa Windows-käyttöjärjestelmän kanssa. Voitte ajatella sitä Microsoftin tarjoamana valtavana työkalupakkina!

Näiden funktioiden avulla ohjelmanne voivat tehdä lähes mitä tahansa: luoda ikkunoita, näyttää ilmoituksia, käyttää tiedostoja, hallita prosesseja ja paljon muuta.

WinAPI x86-Assemblyssa

Siinä missä korkean tason kielet, kuten C++, käyttävät WinAPIa, Assembly antaa teille suoran ja matalan tason hallinnan. Tämä on tärkeää seuraavissa asioissa:

  • Järjestelmätason ohjelmointi: Käyttöjärjestelmän komponenttien tai ajureiden rakentaminen.
  • Suorituskyvyn optimointi: Kriittisten koodiosuuksien hienosäätö.
  • Ohjelman takaisinmallinnus: Sen ymmärtäminen, miten ohjelmisto toimii alimmalla tasollaan.

WinAPI ja DLL:t

Useimmat WinAPI-funktiot on tallennettu Dynamic Link Library -kirjastoihin (DLL). Nämä ovat jaettuja koodikirjastoja, joita ohjelmanne voivat ladata ja käyttää.

Yleisiä DLL:iä ovat:

  • kernel32.dll: Käyttöjärjestelmän ydintoiminnot (muisti, prosessit).
  • user32.dll: Käyttöliittymätoiminnot (ikkunat, viestit).
  • gdi32.dll: Graphics Device Interface -toiminnot.

Assembly-ohjelmanne "tuovat" nämä funktiot käytettäviksi.

`stdcall`-kutsukäytännön ymmärtäminen

WinAPI-funktioita kutsuttaessa on noudatettava stdcall-kutsukäytäntöä. Se määrittää, miten parametrit välitetään ja kuka siivoaa pinon.

  • Parametrit: Viedään pinoon oikealta vasemmalle.
  • Pinon siivous: Kutsuttu funktio (callee) siivoaa pinon ennen paluuta.

Tämä käytäntö on ratkaisevan tärkeä funktioiden oikean suorittamisen ja vakauden kannalta.

Poistuminen ExitProcess-funktiolla

Kirjoitetaan yksinkertainen Assembly-ohjelma, joka käyttää ExitProcess-WinAPI-funktiota lopettaakseen suorituksensa. Tämä funktio ottaa yhden parametrin: poistumiskoodin.

Käytämme MASM-syntaksia ja INVOKE-makroa, joka yksinkertaistaa parametrien viemistä pinoon ja funktioiden kutsumista.

ExitProcess-koodiesimerkki

Kokeile suorittaa tämä esimerkki. Se lopettaa ohjelman yksinkertaisesti poistumiskoodilla 0, joka ilmaisee onnistumista.

.386
.model flat, stdcall
option casemap :none

includelib kernel32.lib
ExitProcess PROTO :DWORD

.code
start:
  ; Call ExitProcess with exit code 0
  invoke ExitProcess, 0
end start

Viestien näyttäminen MessageBoxilla

MessageBox-funktio on klassinen WinAPI-esimerkki. Se näyttää ponnahdusikkunan, jossa on viesti ja valinnainen otsikko.

Se ottaa neljä parametria:

  1. hWnd: Ikkunan kahva (työpöydälle usein NULL).
  2. lpText: Osoitin viestimerkkijonoon.
  3. lpCaption: Osoitin otsikkomerkkijonoon.
  4. uType: Viestiruudun tyyppi (esimerkiksi MB_OK OK-painiketta varten).

MessageBox-koodiesimerkki

Tämä ohjelma näyttää näytöllänne yksinkertaisen "Hello, CoddyKit!"-viestiruudun.

.386
.model flat, stdcall
option casemap :none

includelib kernel32.lib
includelib user32.lib

ExitProcess PROTO :DWORD
MessageBoxA PROTO :DWORD, :DWORD, :DWORD, :DWORD

NULL EQU 0
MB_OK EQU 0

.data
  msgTitle DB "CoddyKit", 0
  msgText DB "Hello, CoddyKit!", 0

.code
start:
  ; hWnd (NULL), lpText, lpCaption, uType (MB_OK button)
  invoke MessageBoxA, NULL, ADDR msgText, ADDR msgTitle, MB_OK
  
  invoke ExitProcess, 0
end start

Virheiden tarkistaminen

WinAPI-funktiot palauttavat usein onnistumista tai epäonnistumista ilmaisevan arvon. Tarkempia virhetietoja varten voitte kutsua GetLastError-funktiota heti API-kutsun jälkeen.

GetLastError noutaa kutsuvan säikeen viimeisimmän virhekoodin. Paluuarvo 0 tarkoittaa yleensä, ettei virhettä ole. Nollasta poikkeavat arvot vastaavat tiettyjä virhetilanteita, joita voi tarkastella Windowsin dokumentaatiosta.

WinAPI-kutsukäytännön tarkistus

Kutsukäytäntöjen ymmärtäminen on erittäin tärkeää oikean WinAPI-vuorovaikutuksen kannalta.

WinAPIn kertaus

Hienoa työtä! Olette tutustuneet Windows APIin x86-Assemblysta käsin tapahtuvan vuorovaikutuksen perusteisiin.

  • Määrittelimme WinAPIn Windows-ohjelmien käyttöjärjestelmätyökalupakiksi.
  • Tutustuimme Dynamic Link Library -kirjastoihin (DLL), kuten kernel32.dll ja user32.dll.
  • Opimme stdcall-kutsukäytännön (parametrit viedään pinoon oikealta vasemmalle ja callee siivoaa pinon).
  • Toteutimme yksinkertaisia ohjelmia käyttäen funktioita ExitProcess ja MessageBox.

Tämä matalan tason vuorovaikutus on tärkeää edistyneessä järjestelmäohjelmoinnissa ja sen ymmärtämisessä, miten Windows todella toimii!

Aloita maksutta

Opi Assembly tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Windows API:n käyttö” ilmainen?

Kyllä – oppitunnin ”Windows API:n käyttö” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssin, päivitä CoddyKit PROhon. Assembly-kieli ja x86-tason järjestelmäohjelmointi-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Windows API:n käyttö”?

Tutustukaa Windows-käyttöjärjestelmän kanssa kommunikointiin sen API:n kautta ja ymmärtäkää järjestelmätason toimintojen mekanismit. Harjoittelet Assembly-kieli ja x86-tason järjestelmäohjelmointi-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Assembly-kieli ja x86-tason järjestelmäohjelmointi-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Windows API:n käyttö”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunnilla?

Kyllä. Jokainen Assembly-kieli ja x86-tason järjestelmäohjelmointi-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Virtuaalimuistin perusteet
  2. Linux-järjestelmäkutsut (syscalls)
  3. Windows API:n käyttö
  4. Dynaaminen muisti: keon varaaminen assemblyssä
← Takaisin: Assembly-kieli ja x86-tason järjestelmäohjelmointi