Registre og hukommelsesoperationer
Forstå, hvordan registre bruges til at lagre data, og hvordan instruktioner interagerer med hukommelsesplaceringer.
Registre og hukommelsesoperationer er en gratis Grundlæggende reverse engineering og binæranalyse-lektion på CoddyKit. Dette er lektion 2 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.
Registre og hukommelse: CPU'ens arbejdsområde
Ved reverse engineering er det grundlæggende at forstå, hvordan en CPU bruger registre og hukommelse. Tænk på dem som CPU'ens korttids- og langtidslager.
- Registre er små, ekstremt hurtige lagerenheder direkte inde i CPU'en.
- Hukommelse (f.eks. RAM) er et større og langsommere lager uden for CPU'en, hvor programmer og data befinder sig.
Vi undersøger, hvordan assemblyinstruktioner flytter data mellem disse vigtige placeringer.
CPU-registre: Interne og hurtige
Registre er den hurtigste måde, CPU'en kan få adgang til data på. De indeholder værdier, som CPU'en aktivt arbejder med, f.eks. mellemresultater fra beregninger eller hukommelsesadresser.
Forskellige arkitekturer (f.eks. x86, x64 og ARM) har forskellige sæt af registre, men deres formål er det samme: at give hurtig adgang til data til beregninger.
x86/x64-generalregistre
I x86/x64-arkitekturer møder du ofte generalregistre, der bruges til forskellige opgaver. Selvom deres roller kan variere, har nogle af dem konventionelle anvendelser:
- RAX/EAX: Bruges ofte til returværdier fra funktioner.
- RBX/EBX: Et generalregister.
- RCX/ECX: Bruges ofte som tæller i løkker.
- RDX/EDX: Kan bruges til argumenter eller data.
Husk, at præfikset "R" (f.eks. RAX) angiver 64-bit, mens "E" (f.eks. EAX) angiver 32-bit-versioner.
`MOV`-instruktionen: Flytning af data
Instruktionen MOV (move) er en af de mest grundlæggende i assembly. Den kopierer data fra en kilde til en destination. Kilden kan være en direkte værdi, et register eller en hukommelsesplacering. Destinationen kan være et register eller en hukommelsesplacering (men ikke direkte fra hukommelse til hukommelse).
Lad os se på et C-eksempel, der konceptuelt svarer til registerhandlinger.
#include <stdio.h>
int main() {
int value1 = 100;
int value2 = 200;
int sum = value1 + value2;
printf("Sum: %d\n", sum);
return 0;
}Forstå hukommelse
Ud over registre har programmer brug for mere lagerplads: hukommelse. Det er her, din kode, dine variable og dine datastrukturer faktisk befinder sig, når CPU'en ikke aktivt behandler dem.
Hukommelsen er organiseret som et enormt felt af bytes, hvor hver byte har en unik adresse. CPU'en bruger disse adresser til at finde og tilgå bestemte data.
- Tænk på hukommelsesadresser som husnumre på en gade.
- Hver byte er en lille "lagerkasse" på en bestemt adresse.
Sådan finder du data: Adresseringstilstande
For at få adgang til data i hukommelsen bruger assembly forskellige adresseringstilstande. Det er forskellige måder at beregne den præcise hukommelsesadresse, som en instruktion har brug for.
- Direkte adressering: Adressen angives eksplicit (f.eks.
[0x12345678]). - Registerindirekte adressering: Adressen er gemt i et register (f.eks.
[EAX]). - Basis- og indeksadressering: Kombinerer et basisregister med et indeksregister (f.eks.
[EBX + ESI]). - Basis-, indeks- og forskydningsadressering: Føjer en konstant forskydning til basis- og indeksværdien (f.eks.
[EBP + ESI + 0x10]).
Disse tilstande er afgørende for adgang til tabeller, strukturer og funktionsparametre.
Hent data: Register <- hukommelse
For at bruge data, der er gemt i hukommelsen, skal CPU'en først indlæse dem i et register. Instruktionen MOV bruges igen til dette, men denne gang er en hukommelsesadresse kilden.
I assembly angiver firkantede parenteser [] typisk adgang til hukommelsen. [EAX] betyder f.eks. "værdien på den hukommelsesadresse, der aktuelt ligger i registret EAX".
#include <stdio.h>
int main() {
int data = 42;
int result;
// Imagine 'data' address is loaded into a register, then its value is fetched
result = data;
printf("Result: %d\n", result);
return 0;
}Gem data: Hukommelse <- register
Når CPU'en har behandlet data i sine registre, skal den ofte gemme resultaterne tilbage i hukommelsen. Det gøres også med instruktionen MOV, men denne gang er en hukommelsesadresse destinationen.
Det er vigtigt at forstå disse indlæsnings- (læse-) og lagringshandlinger (skrivehandlinger), når du skal følge et programs udførelse og datamanipulation under reverse engineering.
#include <stdio.h>
int main() {
int x = 5;
int y = 10;
int *ptr = &x;
// Imagine y's value (in a register) is moved to where ptr points (memory address of x)
*ptr = y;
printf("x is now: %d\n", x);
return 0;
}Stakken: Midlertidigt lager
Et særligt område i hukommelsen er stakken. Den bruges til midlertidig lagring, f.eks. funktionsargumenter, lokale variable og returadresser. Den følger princippet "sidst ind, først ud" (LIFO), ligesom en stak tallerkener.
- PUSH: Føjer data til toppen af stakken.
- POP: Fjerner data fra toppen af stakken.
Registret stack pointer (RSP/ESP) peger altid på stakkens aktuelle top.
Test din forståelse
Tid til en hurtig kontrol af din viden om registre og hukommelse!
Registre og hukommelse: Vigtigste pointer
Vi har gennemgået registrenes og hukommelsens afgørende roller i assembly og reverse engineering:
- Registre er CPU'ens interne og hurtigste lager, som indeholder data til øjeblikkelig behandling.
- Hukommelse (RAM) giver større lagerplads, organiseret efter unikke adresser.
- Instruktionen
MOVer central til at flytte data mellem registre og hukommelse. - Adresseringstilstande definerer, hvordan hukommelsesplaceringer beregnes og tilgås.
- Stakken er et særligt LIFO-hukommelsesområde til midlertidige data.
Det er afgørende at beherske disse begreber for at forstå, hvordan programmer manipulerer data på et lavt niveau!
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 “Registre og hukommelsesoperationer” gratis?
Ja — alle 3 lektioner i læringssporet Grundlæggende reverse engineering og binæranalyse, inklusive “Registre og hukommelsesoperationer”, 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 “Registre og hukommelsesoperationer”?
Forstå, hvordan registre bruges til at lagre data, og hvordan instruktioner interagerer med hukommelsesplaceringer. 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 2 af 4.
Hvor lang tid tager lektionen “Registre og hukommelsesoperationer”?
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
- Grundlæggende x86/x64-assembly
- Registre og hukommelsesoperationer
- Kontrolflow og funktionskald
- Stakken og kaldskonventioner