Grunnleggende om reverse engineering og binæranalyse · leksjon

Grunnleggende x86/x64-assembly

Bli kjent med de grunnleggende instruksjonene og syntaksen i x86- og x64-assembly.

Leksjon 1 av 411 trinn

Grunnleggende x86/x64-assembly er en gratis leksjon i Grunnleggende om reverse engineering og binæranalyse på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Grunnleggende om reverse engineering og binæranalyse, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Grunnleggende om reverse engineering og binæranalyse inneholder totalt 4 leksjoner.

Hva er assemblyspråk?

Velkommen til assemblyspråkets verden! Dette er programmeringsspråket på lavest nivå som mennesker vanligvis leser og skriver.

Det er en symbolsk representasjon av maskinkode, altså de rå binære instruksjonene som en datamaskins prosessor (CPU) forstår og utfører direkte. Tenk på det som CPU-ens morsmål.

REs perspektiv på lavt nivå

For reverse engineers er det avgjørende å forstå assemblyspråk. Når De analyserer et kompilert program, har De sjelden den opprinnelige kildekoden.

I stedet ser De på programmets assemblyrepresentasjon. Ved å lære assembly kan De:

  • Forstå nøyaktig hvordan et program kjører.
  • Identifisere funksjoner, data og kontrollflyt.
  • Avdekke skjult atferd eller sårbarheter.

x86 mot x64: forskjellen

Når vi snakker om x86-/x64-assembly, viser vi til instruksjonssett for Intel- og AMD-prosessorer. Hovedforskjellen er arkitekturens «bredde»:

  • x86: Viser til 32-bits arkitektur.
  • x64: Viser til 64-bits arkitektur, også kjent som AMD64 eller Intel 64.

Selv om x64 introduserer flere registre og bredere databaner, er mange grunnleggende instruksjoner fortsatt like, ofte i utvidede varianter.

Grunnleggende instruksjonsformat

Assembly-instruksjoner følger vanligvis et enkelt format: INSTRUCTION destination, source.

  • INSTRUCTION: Operasjonen som skal utføres (for eksempel flytting, addisjon eller subtraksjon).
  • destination: Hvor resultatet av operasjonen skal lagres.
  • source: Dataene eller plasseringen som operasjonen skal utføres på.

Noen instruksjoner kan ha én operand eller ingen operander i det hele tatt. Rekkefølgen (destination, source) er vanlig i Intel-syntaksen, som vi skal bruke.

MOV-instruksjonen

MOV-instruksjonen er en av de mest grunnleggende. Den står for «move» og brukes til å kopiere data fra en kilde til et mål.

Det er viktig å merke seg at MOV ikke «klipper ut» eller fjerner dataene fra kilden; den kopierer dem ganske enkelt, slik at kilden forblir uendret.

Den generelle formen er: MOV destination, source

Eksempler på MOV (konseptuelt)

La oss se på noen konseptuelle eksempler på MOV. Vi bruker vanlige x86/x64-registernavn som EAX, EBX, RCX og så videre. Dette er små lagringsplasser inne i CPU-en. Du trenger ikke bekymre deg for den nøyaktige funksjonen deres ennå!

  • MOV EAX, EBX: Kopierer verdien fra registeret EBX til registeret EAX.
  • MOV RCX, RDX: Kopierer verdien fra RDX til RCX (64-biters versjon).
  • MOV EAX, 123: Kopierer konstantverdien 123 til registeret EAX.

Aritmetikk: ADD og SUB

I tillegg til å flytte data støtter assembly grunnleggende aritmetiske operasjoner. To vanlige er ADD og SUB.

  • ADD destination, source: Legger verdien i source til verdien i destination og lagrer resultatet i destination.
  • SUB destination, source: Trekker verdien i source fra verdien i destination og lagrer resultatet i destination.

Disse operasjonene endrer måloperanden direkte.

Eksempler på ADD/SUB (konseptuelt)

Her er noen konseptuelle eksempler på ADD og SUB:

  • ADD EAX, EBX: EAX = EAX + EBX
  • SUB RCX, 10: RCX = RCX - 10
  • ADD RDX, R8: RDX = RDX + R8 (med 64-biters generelle registeret R8)

Legg merke til at måloperanden oppdateres med resultatet av operasjonen.

Immediate-verdier og operander

I assembly er begrepene «operand» og «immediate-verdi» viktige:

  • Operand: En verdi eller plassering som en instruksjon opererer på. Dette kan være et register, en minneadresse eller en immediate-verdi.
  • Immediate-verdi: En konstantverdi som er kodet direkte i selve instruksjonen. I MOV EAX, 123 er for eksempel 123 en immediate-verdi.

Når du forstår disse begrepene, blir det enklere å tolke hva slags data en instruksjon håndterer.

Test av assembly-grunnlaget

Hvilket av alternativene nedenfor beskriver best funksjonen til MOV-instruksjonen i x86/x64-assembly?

Oppsummering: Grunnleggende assembly

Godt jobbet! Du har nettopp tatt dine første skritt inn i assembly-språket for x86/x64-prosessorer.

Vi har gått gjennom:

  • Hva assembly-språk er, og hvorfor det er viktig for reverse engineering.
  • Det grunnleggende instruksjonsformatet: INSTRUCTION destination, source.
  • Grunnleggende instruksjoner som MOV (kopiere), ADD (legge til) og SUB (trekke fra).
  • Konseptet med immediate-verdier og operander.

Deretter skal vi gå dypere inn i registre og hvordan de samhandler med minnet!

Gratis å komme i gang

Lær deg Assembly med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Grunnleggende x86/x64-assembly» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Grunnleggende om reverse engineering og binæranalyse, inkludert «Grunnleggende x86/x64-assembly», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Grunnleggende om reverse engineering og binæranalyse inneholder totalt 4 leksjoner.

Hva lærer jeg i «Grunnleggende x86/x64-assembly»?

Bli kjent med de grunnleggende instruksjonene og syntaksen i x86- og x64-assembly. Du øver på Grunnleggende om reverse engineering og binæranalyse med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Grunnleggende om reverse engineering og binæranalyse?

Ingen tidligere erfaring er nødvendig. Grunnleggende om reverse engineering og binæranalyse på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Grunnleggende x86/x64-assembly»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Grunnleggende om reverse engineering og binæranalyse-leksjonen?

Ja. Alle Grunnleggende om reverse engineering og binæranalyse-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Grunnleggende x86/x64-assembly
  2. Registre og minneoperasjoner
  3. Kontrollflyt og funksjonskall
  4. Stakken og kallkonvensjoner
← Tilbake til Grunnleggende om reverse engineering og binæranalyse