Datarepræsentation i binære filer
Lær, hvordan datatyper (heltal, flydende tal og strenge) lagres i hukommelsen og i filer, herunder begreber som endianess.
Datarepræsentation i binære filer 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.
Hvad er binære data?
Når du udfører reverse engineering, ser du på et programs rå binære form. Det betyder, at du skal forstå, hvordan alle slags data – tal, tekst og meget mere – gemmes som sekvenser af bits og bytes.
En bit er den mindste enhed og kan enten være 0 eller 1. Otte bits udgør en byte. Alt, hvad en computer gør, fra beregninger til visning af tekst, er baseret på disse grundlæggende enheder.
Tal som bits: heltal
Heltal er hele tal. De kan være signed (positive eller negative) eller unsigned (kun ikke-negative). Antallet af anvendte bytes bestemmer det interval af værdier, et heltal kan indeholde.
- Byte (8-bit): 0 til 255 (unsigned) eller -128 til 127 (signed).
- Word (16-bit): Op til 65.535 (unsigned).
- DWord (32-bit): Op til ca. 4 milliarder (unsigned).
- QWord (64-bit): Meget større tal!
Heltalsstørrelse betyder noget
Lad os se på, hvordan forskellige heltalsstørrelser påvirker den maksimale værdi. Denne Python-kode viser maksimumværdien for et unsigned 8-bit-heltal (en byte) og et signed 8-bit-heltal.
# Max unsigned 8-bit integer
max_8_bit_unsigned = 2**8 - 1
print(f"Max 8-bit unsigned: {max_8_bit_unsigned}")
# Max signed 8-bit integer
max_8_bit_signed = 2**7 - 1
min_8_bit_signed = -2**7
print(f"Max 8-bit signed: {max_8_bit_signed}")
print(f"Min 8-bit signed: {min_8_bit_signed}")Flydende kommatal (floats)
Tal med decimaltegn, som 3.14 eller -0.5, kaldes flydende kommatal. De gemmes anderledes end heltal, så deres brøkdele kan håndteres.
De fleste systemer bruger IEEE 754-standarden til floats. Denne standard definerer, hvordan et tals fortegn, eksponent og brøkdel repræsenteres i bits. Almindelige størrelser er 32-bit (enkelt præcision) og 64-bit (dobbelt præcision).
Tekst: tegn og strenge
Teksttegn gemmes også som tal. Den mest almindelige afbildning for engelske tegn er ASCII, hvor hvert tegn (som 'A' eller '!') svarer til et bestemt 8-bit-tal.
Til et større udvalg af tegn (emojis, fremmedsprog) bruges Unicode. UTF-8 er en populær Unicode-kodning, der bruger 1 til 4 bytes pr. tegn, hvilket gør den fleksibel og bagudkompatibel med ASCII.
En streng er ganske enkelt en sekvens af disse tegn, som ofte afsluttes med en særlig null-byte (0x00) for at markere slutningen.
Sådan bliver strenge til bytes
Her kan du se, hvordan en simpel streng repræsenteres som bytes ved hjælp af UTF-8. Bemærk, hvordan hvert tegn får en numerisk værdi.
message = "Hello"
bytes_message = message.encode('utf-8')
print(f"String: '{message}'")
print(f"Bytes (UTF-8): {bytes_message}")
# Example with a non-ASCII character
smiley = "😊"
bytes_smiley = smiley.encode('utf-8')
print(f"String: '{smiley}'")
print(f"Bytes (UTF-8): {bytes_smiley}")Endianess: byteorden
Når et stykke data, f.eks. et 32-bit-heltal, fylder mere end én byte, skal der træffes et valg: Hvilken byte kommer først i hukommelsen? Denne rækkefølge kaldes endianness.
- Big-endian: Den mest betydende byte (MSB) kommer først. Tænk på at læse tal fra venstre mod højre, som "123", hvor '1' er det mest betydende ciffer.
- Little-endian: Den mindst betydende byte (LSB) kommer først. Det svarer til at skrive "321", hvis '1' var det mest betydende ciffer.
Visualisering af endianness
Lad os tage det 32-bit-hexadecimale tal 0x12345678. Dette tal har fire bytes: 12, 34, 56, 78.
- Big-endian: Gemmer bytes i hukommelsen som
12 34 56 78(MSB først). - Little-endian: Gemmer bytes i hukommelsen som
78 56 34 12(LSB først).
De fleste moderne Intel/AMD-CPU'er (x86/x64) bruger little-endian. Netværksprotokoller bruger ofte big-endian.
Endianness og reverse engineering
Det er afgørende at forstå endianness, når du arbejder med rå binære data, især på tværs af forskellige systemer eller filformater.
- Hvis du læser et 32-bit-heltal fra en big-endian-fil på et little-endian-system uden konvertering, bliver værdien forkert.
- Netværkspakker bruger ofte big-endian, så analyse af netværkstrafik kræver, at du er opmærksom på dette.
- Mange indlejrede systemer (som ARM-processorer) kan konfigureres til begge dele, hvilket gør det mere komplekst.
Kontrol af endianness
Forestil dig, at et 32-bit-heltal med den hexadecimale værdi 0xAABBCCDD gemmes i hukommelsen. Hvis systemet er little-endian, hvilken rækkefølge vil bytes have i hukommelsen, når du begynder ved den laveste adresse?
Opsummering af datarepræsentation
Godt klaret! I denne lektion undersøgte vi, hvordan data repræsenteres i binære filer:
- Heltal: Gemmes som signed eller unsigned tal, hvor størrelsen bestemmer intervallet.
- Flydende kommatal: Bruger standarder som IEEE 754 til decimaler.
- Tegn og strenge: Afbildes til tal (ASCII, UTF-8) og afsluttes ofte med en null-byte.
- Endianness: Byteordenen (big-endian eller little-endian) for data, der består af flere bytes, hvilket er afgørende for korrekt fortolkning.
Det er afgørende at forstå disse grundlæggende begreber for at kunne fortolke enhver binær fil eller hukommelsesdump. I det næste afsnit ser vi på almindelige binære filformater!
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 “Datarepræsentation i binære filer” gratis?
Ja — alle 3 lektioner i læringssporet Grundlæggende reverse engineering og binæranalyse, inklusive “Datarepræsentation i binære filer”, 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 “Datarepræsentation i binære filer”?
Lær, hvordan datatyper (heltal, flydende tal og strenge) lagres i hukommelsen og i filer, herunder begreber som endianess. 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 “Datarepræsentation i binære filer”?
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
- Oversigt over CPU-arkitekturer
- Datarepræsentation i binære filer
- Almindelige binære filformater
- Endianess og byte-rækkefølge