De basis van reverse-engineering en binaire analyse · Les

Basisprincipes van x86/x64-assembly

Maak kennis met de basisinstructies en syntaxis van de x86- en x64-assemblytaal.

Les 1 van 411 stappen

Basisprincipes van x86/x64-assembly is een gratis De basis van reverse-engineering en binaire analyse-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject De basis van reverse-engineering en binaire analyse. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus De basis van reverse-engineering en binaire analyse bevat in totaal 4 lessen.

Wat is assemblytaal?

Welkom in de wereld van assemblytaal! Dit is de programmeertaal op het laagste niveau die mensen doorgaans lezen en schrijven.

Het is een symbolische weergave van machinecode: de ruwe binaire instructies die de processor (CPU) van een computer rechtstreeks begrijpt en uitvoert. Je kunt het zien als de moedertaal van de CPU.

De laag-niveauweergave voor reverse-engineering

Voor reverse-engineers is inzicht in assemblytaal cruciaal. Wanneer je een gecompileerd programma analyseert, beschik je zelden over de oorspronkelijke broncode.

In plaats daarvan bekijk je de assemblyweergave ervan. Assembly leren helpt je om:

  • Precies te begrijpen hoe een programma wordt uitgevoerd.
  • Functies, gegevens en de besturingsstroom te identificeren.
  • Verborgen gedrag of kwetsbaarheden aan het licht te brengen.

x86 versus x64: het verschil

Wanneer we het over x86/x64-assembly hebben, bedoelen we instructiesets voor Intel- en AMD-processors. Het belangrijkste verschil is de 'breedte' van de architectuur:

  • x86: Verwijst naar een 32-bitsarchitectuur.
  • x64: Verwijst naar een 64-bitsarchitectuur, ook bekend als AMD64 of Intel 64.

x64 introduceert meer registers en bredere datapaden, maar veel fundamentele instructies blijven vergelijkbaar, vaak met uitgebreide versies.

Basisindeling van een instructie

Assemblerinstructies volgen over het algemeen een eenvoudige indeling: INSTRUCTION destination, source.

  • INSTRUCTION: Dit is de bewerking die moet worden uitgevoerd (bijvoorbeeld verplaatsen, optellen of aftrekken).
  • destination: Waar het resultaat van de bewerking wordt opgeslagen.
  • source: De gegevens of locatie waarop de bewerking wordt uitgevoerd.

Sommige instructies hebben misschien één operand of helemaal geen operand. De volgorde (destination, source) komt vaak voor in de Intel-syntaxis, die we zullen gebruiken.

De MOV-instructie

De MOV-instructie is een van de meest fundamentele instructies. De naam staat voor 'move' en de instructie wordt gebruikt om gegevens van een bron naar een bestemming te kopiëren.

Het is belangrijk om te weten dat MOV de gegevens niet uit de bron 'knipt' of verwijdert; de instructie kopieert ze alleen, waardoor de bron ongewijzigd blijft.

De algemene vorm is: MOV destination, source

Voorbeelden van MOV (conceptueel)

We bekijken enkele conceptuele voorbeelden van MOV. We gebruiken gangbare x86/x64-registernamen zoals EAX, EBX, RCX enzovoort. Dit zijn kleine opslaglocaties in de CPU. Maak je voorlopig geen zorgen over hun exacte functie!

  • MOV EAX, EBX: Kopieer de waarde uit register EBX naar register EAX.
  • MOV RCX, RDX: Kopieer de waarde uit RDX naar RCX (64-bitsversie).
  • MOV EAX, 123: Kopieer de constante waarde 123 naar register EAX.

Rekenkundige bewerkingen: ADD en SUB

Naast het verplaatsen van gegevens ondersteunt assembler ook elementaire rekenkundige bewerkingen. Twee veelgebruikte instructies zijn ADD en SUB.

  • ADD destination, source: Telt de waarde van source op bij de waarde van destination en slaat het resultaat op in destination.
  • SUB destination, source: Trekt de waarde van source af van de waarde van destination en slaat het resultaat op in destination.

Deze bewerkingen wijzigen de bestemmingsoperand rechtstreeks.

Voorbeelden van ADD/SUB (conceptueel)

Hier volgen enkele conceptuele voorbeelden van ADD en SUB:

  • ADD EAX, EBX: EAX = EAX + EBX
  • SUB RCX, 10: RCX = RCX - 10
  • ADD RDX, R8: RDX = RDX + R8 (met het 64-bits algemene register R8)

Let erop dat de bestemmingsoperand wordt bijgewerkt met het resultaat van de bewerking.

Directe waarden en operanden

In assembler zijn de termen 'operand' en 'directe waarde' belangrijk:

  • Operand: Een waarde of locatie waarop een instructie werkt. Dit kan een register, een geheugenadres of een directe waarde zijn.
  • Directe waarde: Een constante waarde die rechtstreeks in de instructie zelf is gecodeerd. In MOV EAX, 123 is 123 bijvoorbeeld een directe waarde.

Als je deze termen begrijpt, kun je beter bepalen met welk soort gegevens een instructie werkt.

Controle van de basiskennis over assembler

Welke van de volgende opties beschrijft het best de functie van de MOV-instructie in x86/x64-assembler?

Samenvatting: de basis van assembler

Goed gedaan! Je hebt zojuist je eerste stappen gezet in de wereld van de assembler voor x86/x64-processors.

We hebben behandeld:

  • Wat assembler is en waarom deze taal essentieel is voor reverse-engineering.
  • De basisindeling van een instructie: INSTRUCTION destination, source.
  • Fundamentele instructies zoals MOV (kopiëren), ADD (optellen) en SUB (aftrekken).
  • Het concept van directe waarden en operanden.

Vervolgens gaan we dieper in op registers en hoe ze samenwerken met het geheugen!

Gratis beginnen

Leer Assembly met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
12
Lessen
48

Veelgestelde vragen

Is de les “Basisprincipes van x86/x64-assembly” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad De basis van reverse-engineering en binaire analyse, waaronder “Basisprincipes van x86/x64-assembly”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus De basis van reverse-engineering en binaire analyse bevat in totaal 4 lessen.

Wat leer ik in “Basisprincipes van x86/x64-assembly”?

Maak kennis met de basisinstructies en syntaxis van de x86- en x64-assemblytaal. Je oefent met De basis van reverse-engineering en binaire analyse door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met De basis van reverse-engineering en binaire analyse te beginnen?

Ervaring vooraf is niet nodig. De basis van reverse-engineering en binaire analyse op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Basisprincipes van x86/x64-assembly”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over De basis van reverse-engineering en binaire analyse?

Ja. Elke les over De basis van reverse-engineering en binaire analyse bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Basisprincipes van x86/x64-assembly
  2. Registers en geheugenbewerkingen
  3. Control flow en functieaanroepen
  4. De stack en aanroepconventies
← Terug naar De basis van reverse-engineering en binaire analyse