Grundlæggende reverse engineering og binæranalyse · Lektion

Grundlæggende x86/x64-assembly

Få en introduktion til de grundlæggende instruktioner og syntaksen i x86- og x64-assemblysprog.

Lektion 1 af 411 trin

Grundlæggende x86/x64-assembly er en gratis Grundlæggende reverse engineering og binæranalyse-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Grundlæggende reverse engineering og binæranalyse, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Grundlæggende reverse engineering og binæranalyse-kurset indeholder 4 lektioner i alt.

Hvad er assemblysprog?

Velkommen til assemblysprogets verden! Det er det programmeringssprog på laveste niveau, som mennesker typisk læser og skriver.

Det er en symbolsk repræsentation af maskinkode, altså de rå binære instruktioner, som en computers processor (CPU) forstår og udfører direkte. Tænk på det som CPU'ens modersmål.

RE's perspektiv på lavt niveau

For reverse engineers er det afgørende at forstå assemblysprog. Når du analyserer et kompileret program, har du sjældent den oprindelige kildekode.

I stedet ser du på programmets assemblyrepræsentation. Når du lærer assembly, bliver du bedre i stand til at:

  • Forstå præcis, hvordan et program udføres.
  • Identificere funktioner, data og kontrolflow.
  • Afsløre skjult adfærd eller sårbarheder.

x86 vs. x64: forskellen

Når vi taler om x86/x64-assembly, henviser vi til instruktionssæt for Intel- og AMD-processorer. Den vigtigste forskel er arkitekturens 'bredde':

  • x86: Henviser til en 32-bit-arkitektur.
  • x64: Henviser til en 64-bit-arkitektur, også kendt som AMD64 eller Intel 64.

Selvom x64 introducerer flere registre og bredere dataveje, er mange grundlæggende instruktioner fortsat ens, ofte i udvidede versioner.

Grundlæggende instruktionsformat

Assemblerinstruktioner følger generelt et enkelt format: INSTRUCTION destination, source.

  • INSTRUCTION: Den handling, der skal udføres (f.eks. flytte, lægge til eller trække fra).
  • destination: Hvor resultatet af handlingen skal gemmes.
  • source: De data eller den placering, som handlingen skal udføres på.

Nogle instruktioner kan have én operand eller slet ingen. Rækkefølgen (destination, source) er almindelig i Intel-syntaks, som vi bruger her.

MOV-instruktionen

Instruktionen MOV er en af de mest grundlæggende. Den står for "move" og bruges til at kopiere data fra en kilde til en destination.

Det er vigtigt at bemærke, at MOV ikke "klipper" eller fjerner dataene fra kilden; den kopierer dem blot, så kilden forbliver uændret.

Dens generelle form er: MOV destination, source

Eksempler på MOV (konceptuelle)

Lad os se på nogle konceptuelle eksempler med MOV. Vi bruger almindelige x86/x64-registernavne som EAX, EBX, RCX osv., som er små lagerpladser inde i CPU'en. Du behøver ikke bekymre dig om deres præcise funktion endnu!

  • MOV EAX, EBX: Kopiér værdien fra registret EBX til registret EAX.
  • MOV RCX, RDX: Kopiér værdien fra RDX til RCX (64-bit-versionen).
  • MOV EAX, 123: Kopiér konstanten 123 til registret EAX.

Aritmetik: ADD og SUB

Ud over blot at flytte data understøtter assembly grundlæggende aritmetiske handlinger. To almindelige er ADD og SUB.

  • ADD destination, source: Lægger værdien i source til værdien i destination og gemmer resultatet i destination.
  • SUB destination, source: Trækker værdien i source fra værdien i destination og gemmer resultatet i destination.

Disse handlinger ændrer destinationsoperanden direkte.

Eksempler på ADD/SUB (konceptuelle)

Her er nogle konceptuelle 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-bit-generalregistret R8)

Bemærk, hvordan destinationsoperanden opdateres med handlingens resultat.

Direkte værdier og operander

I assembly er begreberne "operand" og "direkte værdi" vigtige:

  • Operand: En værdi eller placering, som en instruktion arbejder på. Det kan være et register, en hukommelsesadresse eller en direkte værdi.
  • Direkte værdi: En konstant værdi, der er kodet direkte i selve instruktionen. I MOV EAX, 123 er 123 f.eks. en direkte værdi.

Når du forstår disse begreber, bliver det lettere at se, hvilken type data en instruktion håndterer.

Kontrol af grundlæggende assembly

Hvilken af følgende beskriver bedst funktionen af instruktionen MOV i x86/x64-assembly?

Opsummering: Grundlæggende assembly

Godt klaret! Du har netop taget dine første skridt ind i assemblysproget til x86/x64-processorer.

Vi gennemgik:

  • Hvad assemblysprog er, og hvorfor det er vigtigt ved reverse engineering.
  • Det grundlæggende instruktionsformat: INSTRUCTION destination, source.
  • Grundlæggende instruktioner som MOV (kopiér), ADD (læg til) og SUB (træk fra).
  • Begrebet direkte værdier og operander.

Nu går vi mere i dybden med registre, og hvordan de arbejder sammen med hukommelsen!

Gratis at komme i gang

Lær Assembly med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Grundlæggende x86/x64-assembly” gratis?

Ja — alle 3 lektioner i læringssporet Grundlæggende reverse engineering og binæranalyse, inklusive “Grundlæggende x86/x64-assembly”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Grundlæggende reverse engineering og binæranalyse-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Grundlæggende x86/x64-assembly”?

Få en introduktion til de grundlæggende instruktioner og syntaksen i x86- og x64-assemblysprog. Du øver dig i Grundlæggende reverse engineering og binæranalyse med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Grundlæggende reverse engineering og binæranalyse?

Der kræves ingen tidligere erfaring. Grundlæggende reverse engineering og binæranalyse på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Grundlæggende x86/x64-assembly”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Grundlæggende reverse engineering og binæranalyse-lektion?

Ja. Alle Grundlæggende reverse engineering og binæranalyse-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Grundlæggende x86/x64-assembly
  2. Registre og hukommelsesoperationer
  3. Kontrolflow og funktionskald
  4. Stakken og kaldskonventioner
← Tilbage til Grundlæggende reverse engineering og binæranalyse