Grunnleggende om reverse engineering og binæranalyse · leksjon

Sette bruddpunkter og stege gjennom kode

Bli ekspert på bruk av bruddpunkter for å stanse kjøringen og stegvis spore programmets kontrollflyt.

Leksjon 2 av 412 trinn

Sette bruddpunkter og stege gjennom kode er en gratis leksjon i Grunnleggende om reverse engineering og binæranalyse på CoddyKit. Dette er leksjon 2 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.

Sett programflyten på pause og undersøk den

Når De analyserer programmer dynamisk, er det avgjørende å sette kjøringen på pause på bestemte punkter for å undersøke variabler, minne og registre. Dette hjelper oss med å forstå hva programmet gjør, trinn for trinn.

I denne leksjonen viser vi Dem hvordan De bruker stoppunkter til å sette kjøringen på pause, og stegingskommandoer til å navigere gjennom koden linje for linje.

Hva er stoppunkter?

Et stoppunkt er som et «stopp-skilt» De plasserer i koden. Når programmet når en linje med et stoppunkt, settes kjøringen på pause, og kontrollen gis tilbake til debuggeren.

  • De lar Dem fryse programmets tilstand.
  • Deretter kan De undersøke variabler, minne og CPU-registre.
  • Dette er avgjørende for å forstå kompleks logikk eller identifisere feil og sårbarheter.

Typer stoppunkter

Den vanligste typen er et kodestoppunkt (også kalt instruksjonsstoppunkt). Dette setter kjøringen på pause rett før en bestemt instruksjon kjøres.

Det finnes også datastoppunkter (eller watchpoints), som setter kjøringen på pause når en bestemt minneadresse aksesseres eller endres. Foreløpig fokuserer vi på kodestoppunkter.

Eksempelprogram for debugging

La oss bruke dette enkle C-programmet til å demonstrere stoppunkter og stegvis kjøring. Det har noen funksjoner som hjelper oss med å spore kjøringen.

/* example.c */
#include <stdio.h>

int multiply(int a, int b) {
    return a * b;
}

int calculate(int x, int y) {
    int result = multiply(x, y);
    return result + x;
}

int main() {
    int val1 = 3;
    int val2 = 4;
    int final_result = calculate(val1, val2);
    printf("Final Result: %d\n", final_result);
    return 0;
}

Sette et kodestoppunkt

I en debugger (for eksempel GDB) setter De vanligvis et stoppunkt ved å angi et funksjonsnavn eller et linjenummer. For eksempel kan De sette et stoppunkt i starten av calculate-funksjonen vår:

  • break calculate (GDB)
  • b example.c:11 (GDB, for linje 11)

Når stoppunktet er satt, kjører programmet normalt når De bruker «run», helt til det når dette punktet.

Kjøre frem til et stoppunkt

Etter at De har satt et stoppunkt, vil De vanligvis gi kommandoen «run» (for eksempel run i GDB). Programmet begynner da å kjøre.

Når programtelleren når instruksjonen der stoppunktet er satt, stanser kjøringen umiddelbart. Debuggeren viser deretter den gjeldende kodelinjen og venter på neste kommando.

Introduksjon til stegvis kjøring

Når kjøringen er satt på pause ved et stoppunkt, lar steging Dem kjøre programmet én instruksjon eller én kildekodelinje om gangen. Dette gir Dem detaljert kontroll over programmets flyt.

Det finnes ulike stegingskommandoer for forskjellige situasjoner, og hver av dem har en bestemt oppførsel når den møter funksjonskall.

Steg over (<code>next</code>)

Kommandoen steg over (ofte next i GDB) kjører den gjeldende kodelinjen. Hvis linjen inneholder et funksjonskall, kjører den hele funksjonen og stopper deretter på neste linje *etter* funksjonskallet.

Bruk next når De stoler på en funksjon eller ikke er interessert i den interne implementasjonen, men bare i returverdien.

Steg inn (<code>step</code>)

Kommandoen steg inn (ofte step i GDB) kjører også den gjeldende linjen. Hvis linjen inneholder et funksjonskall, settes kjøringen imidlertid på pause ved den første instruksjonen i funksjonen.

Bruk step når De vil undersøke den interne logikken i en funksjon som blir kalt.

Steg ut (<code>finish</code>)

Kommandoen step out (ofte finish i GDB) brukes når De har steget inn i en funksjon og nå raskt vil gå ut av den.

Den kjører resten av den gjeldende funksjonen og stopper deretter på linjen *etter* at funksjonskallet returnerer i den kallende funksjonen. Dette gjør at De slipper å gå gjennom hver eneste linje i en funksjon De ikke lenger er interessert i.

Sjekk av stoppunkt

Ta utgangspunkt i funksjonen `calculate` fra eksempelet vårt. De satte et stoppunkt på linje 11 (int result = multiply(x, y);) og kjører programmet. Når det treffer stoppunktet, bruker De kommandoen step. Hvor stopper kjøringen neste gang?

Oppsummering: Stoppunkter og stegvis kjøring

De har lært hvordan stoppunkter setter programkjøringen på pause på bestemte steder, slik at De kan undersøke tilstanden. Vi har gått gjennom:

  • Stoppunkter: «Stoppskilt» i koden.
  • Kjøre til stoppunkter: Stanser kjøringen på ønskede steder.
  • Stegvis kjøring: Kjører koden linje for linje.
  • Step Over (next): Kjører funksjonskall fullstendig.
  • Step Into (step): Går inn i funksjonskall.
  • Step Out (finish): Går ut av den gjeldende funksjonen.

Å beherske disse feilsøkingskommandoene er grunnleggende for effektiv dynamisk analyse og reverse engineering!

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 «Sette bruddpunkter og stege gjennom kode» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Grunnleggende om reverse engineering og binæranalyse, inkludert «Sette bruddpunkter og stege gjennom kode», 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 «Sette bruddpunkter og stege gjennom kode»?

Bli ekspert på bruk av bruddpunkter for å stanse kjøringen og stegvis spore programmets kontrollflyt. 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 2 av 4.

Hvor lang tid tar leksjonen «Sette bruddpunkter og stege gjennom kode»?

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. Det viktigste om debuggere (GDB, WinDbg)
  2. Sette bruddpunkter og stege gjennom kode
  3. Undersøke minne og registre
  4. Spore API- og systemkall under kjøring
← Tilbake til Grunnleggende om reverse engineering og binæranalyse