Rappresentazione dei dati nei binari
Impari come i tipi di dati (interi, numeri in virgola mobile e stringhe) vengono memorizzati in memoria e nei file, includendo concetti come l'endianness.
Rappresentazione dei dati nei binari è una lezione Reverse Engineering & Binary Analysis Basics gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Reverse Engineering & Binary Analysis Basics, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Reverse Engineering & Binary Analysis Basics include 4 lezioni in totale.
Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.
What is Binary Data?
When you reverse engineer, you're looking at a program's raw binary form. This means understanding how all kinds of data—numbers, text, and more—are stored as sequences of bits and bytes.
A bit is the smallest unit, either 0 or 1. Eight bits make a byte. Everything a computer does, from calculations to displaying text, relies on these fundamental units.
Numbers as Bits: Integers
Integers are whole numbers. They can be signed (positive or negative) or unsigned (only non-negative). The number of bytes used determines the range of values an integer can hold.
- Byte (8-bit): 0 to 255 (unsigned) or -128 to 127 (signed).
- Word (16-bit): Up to 65,535 (unsigned).
- DWord (32-bit): Up to ~4 billion (unsigned).
- QWord (64-bit): Much larger numbers!
Integer Size Matters
Let's see how different integer sizes affect the maximum value. This Python code shows the max value for an unsigned 8-bit integer (a byte) and a signed 8-bit integer.
# 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}")Floating-Point Numbers (Floats)
Numbers with decimal points, like 3.14 or -0.5, are called floating-point numbers. They are stored differently from integers to handle their fractional parts.
Most systems use the IEEE 754 standard for floats. This standard defines how a number's sign, exponent, and fractional part are represented in bits. Common sizes are 32-bit (single-precision) and 64-bit (double-precision).
Text: Characters & Strings
Text characters are also stored as numbers. The most common mapping for English characters is ASCII, where each character (like 'A' or '!') corresponds to a specific 8-bit number.
For a wider range of characters (emojis, foreign languages), Unicode is used. UTF-8 is a popular Unicode encoding that uses 1 to 4 bytes per character, making it flexible and backward-compatible with ASCII.
A string is simply a sequence of these characters, often ending with a special null byte (0x00) to mark its end.
How Strings Become Bytes
Here's how a simple string is represented as bytes using UTF-8. Notice how each character gets a numerical value.
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}")Endianness: Byte Order
When a piece of data, like a 32-bit integer, takes up more than one byte, there's a choice to be made: which byte comes first in memory? This order is called endianness.
- Big-endian: The most significant byte (MSB) comes first. Think of reading numbers left-to-right, like "123" where '1' is the most significant digit.
- Little-endian: The least significant byte (LSB) comes first. This is like writing "321" if '1' were the most significant.
Visualizing Endianness
Let's take the 32-bit hexadecimal number 0x12345678. This number has four bytes: 12, 34, 56, 78.
- Big-endian: Stores bytes in memory as
12 34 56 78(MSB first). - Little-endian: Stores bytes in memory as
78 56 34 12(LSB first).
Most modern Intel/AMD CPUs (x86/x64) are little-endian. Network protocols often use big-endian.
Endianness & Reverse Engineering
Understanding endianness is crucial when you're working with raw binary data, especially across different systems or file formats.
- If you read a 32-bit integer from a big-endian file on a little-endian system without conversion, the value will be incorrect.
- Network packets often use big-endian, so analyzing network traffic requires awareness.
- Many embedded systems (like ARM processors) can be configured for either, adding complexity.
Endianness Check
Imagine a 32-bit integer with the hexadecimal value 0xAABBCCDD is stored in memory. If the system is little-endian, what would be the order of bytes in memory, starting from the lowest address?
Data Representation Recap
Great job! In this lesson, we explored how data is represented in binaries:
- Integers: Stored as signed or unsigned numbers, with size determining range.
- Floating-points: Use standards like IEEE 754 for decimals.
- Characters & Strings: Mapped to numbers (ASCII, UTF-8) and often null-terminated.
- Endianness: The byte order (big-endian or little-endian) for multi-byte data, critical for correct interpretation.
Understanding these fundamentals is key to interpreting any binary file or memory dump. Next, we'll look at common binary file formats!
Domande Frequenti
La lezione «Rappresentazione dei dati nei binari» è gratuita?
Sì — il testo completo di «Rappresentazione dei dati nei binari» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Reverse Engineering & Binary Analysis Basics, passa a CoddyKit PRO. Il corso Reverse Engineering & Binary Analysis Basics include 4 lezioni in totale.
Cosa imparerò in «Rappresentazione dei dati nei binari»?
Impari come i tipi di dati (interi, numeri in virgola mobile e stringhe) vengono memorizzati in memoria e nei file, includendo concetti come l'endianness. Eserciti Reverse Engineering & Binary Analysis Basics con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Reverse Engineering & Binary Analysis Basics?
Non è richiesta alcuna esperienza precedente. Reverse Engineering & Binary Analysis Basics su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Rappresentazione dei dati nei binari»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Reverse Engineering & Binary Analysis Basics?
Sì. Ogni lezione Reverse Engineering & Binary Analysis Basics include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Panoramica delle architetture CPU
- Rappresentazione dei dati nei binari
- Formati comuni dei file binari
- Endianness e ordine dei byte