Binair bestand. Hoe een binair bestand te lezen

Werken met binaire bestanden

Alle informatie wordt in de computer opgeslagen in de vorm van 0 en 1, dat wil zeggen in binaire vorm. Binaire bestanden verschillen alleen van tekstbestanden in de manier waarop ermee wordt gewerkt. Als we bijvoorbeeld het getal “4” in een tekstbestand schrijven, wordt het als een teken geschreven en is er één byte nodig om het op te slaan. Dienovereenkomstig zal de bestandsgrootte gelijk zijn aan één byte. Een tekstbestand met de vermelding: "145687" zal zes bytes groot zijn.

Als we het gehele getal 145.687 in een binair bestand schrijven, zal het vier bytes groot zijn, aangezien dat de hoeveelheid is die nodig is om int-gegevens op te slaan. Dat wil zeggen dat binaire bestanden compacter zijn en in sommige gevallen gemakkelijker te verwerken.

Standaardgegevenstypen naar binaire bestanden schrijven

Om een ​​binair bestand te openen, moet u de toegangsmodus instellen op ios::binary (in sommige C++-compilers, ios::bin).

Om een ​​uitvoerbestand te maken, maakt u een object:

ofstream outBinFile("out.bin", ios::out | ios::binary);

/* het maken van een klasseobject vanstroom uit. bak

als (! uit_f ik 1) // standaardcontrole

Gegevens worden geschreven met behulp van de write()-methode, die twee parameters heeft: de eerste is een verwijzing naar het begin (startadres) van de gegevens die worden geschreven, de tweede is het aantal bytes dat moet worden geschreven. In dit geval moet de pointer expliciet worden geconverteerd naar het char-type.

Voorbeeld 1. Schrijf variabelen van verschillende typen naar een binair bestand:

ofstream outBinFile("test.bin", ios::out I

ios::binair); /^een klasseobject maken van stroom en probeer het aan een bestand te koppelen test. bak in schrijfmodus voor binaire bestanden */

inta - 145687; //declaratie van een gehele variabele A

outBinFi-bestand. write ((char*) &a, grootte van (a)) ; /^schrijven naar bestand

variabel A als een stroom bytes, d.w.z. de interne representatie van de gehele variabele naar een bestand schrijven a */ vlotter x - 123,25; // declaratie van een reële variabele X

outBinFile .write ((char*) &x, grootte van (x)) ; /^schrijven naar bestand

variabel X als een stroom bytes, d.w.z. de interne representatie van de gehele variabele x*/ naar een bestand schrijven

//definitie van een symbolische variabele Met en initialiseren met het symbool g outBinFile.write((char*)&c, groottevan(c));

// neem een ​​symbool op G archiveren

outBinFile.close(); retour 0;

Als u de inhoud van het test.bin-bestand opent met een teksteditor, ziet het er als volgt uit:

en de bestandsgrootte zal 9 bytes zijn.

Standaardgegevenstypen uit binaire bestanden lezen

Om een ​​bestaand binair bestand te openen om te lezen, moet u een object maken:

ifstream inpBinFile("inp.bin", ios::in I ios::binary);

/* we gebruiken een combinatie van vlaggen die aangeven dat het bestand is geopend voor lezen in binaire vorm */

als (! inpBinFile)

coutOm gegevens te lezen, gebruiken we de functie read(), die parameters heeft die vergelijkbaar zijn met de functie write().

#include gebruikt naamruimte std; int hoofd()

ifstream inpBinFile("test.bin", ios::in I

ios::binair); / /open het bestand om het in binaire vorm te lezen

int a; zweven x; teken c = "g";

inpBinFile.read((char*)&a, groottevan(a));

//lees een geheel getalvariabele inpBinFile.read((char*)&x, groottevan(x));

//lees een echte variabele inpBinFile.read((char*)&c, groottevan (c));

//lees een symbolische variabele

inpBinFile.close(); uit

Resultaat van het programma:

a = 145687 x = 123,25 s = g

Houd er rekening mee dat er geen informatieconversie plaatsvindt bij gebruik van de schrijf- en leesfuncties. De interne weergave van gegevens wordt naar het bestand geschreven en uitgelezen. Daarom gaven de twee voorgaande programma's het juiste resultaat.

Aangepaste gegevenstypen schrijven en lezen naar binaire bestanden

In tegenstelling tot tekstbestanden verschilt het werken met aangepaste gegevenstypen met behulp van binaire bestanden niet van standaardgegevenstypen. De methoden write() en read() worden op dezelfde manier gebruikt. De programmeur hoeft alleen het adres van de te schrijven geheugensectie en het aantal te schrijven bytes aan te geven, waarbij hij er rekening mee moet houden dat er geen dataconversie plaatsvindt, maar alleen de interne representatie van informatie wordt geschreven en gelezen.

Wanneer u met binaire bestanden werkt, kunnen ook de methoden seekg(), tellg(), seekp() en tellp() worden gebruikt.

Voorbeeld 3. Schrijf een programma dat informatie over een groep toeristen naar een binair bestand schrijft.

fstream BinFile("ankety.bin", ios::in I ios::uit | ios::binary);

Anketa Gruppa = ; voor (int i = 0; ik

BinFile.write((char*)&Gruppa[i], groottevan(Anketa)); BinFile.close(); retour 0;

Voorbeeld 4. Het bestand “ankety.bin” bevat gegevens over een groep toeristen; het is noodzakelijk om het te lezen en op het scherm weer te geven.

#include gebruikt naamruimte std; struct-vragenlijst (

tekennaam; int leeftijd;

structureel gegevenstype Vragenlijst naar scherm*/

ostream&-operator

fstream BinFile("ankety.bin", ios::in | ios::uit | ios::binary); als (!BinFile)

voor (int i = 0; ik

//lees onmiddellijk alle bytes die door de typevariabele worden ingenomen Anketa BinFile.read((char*)&Gruppa[i], groottevan(Anketa));

BinFile.close(); retour 0;

Resultaat van het programma:

Ivanov, 23 Sidorov, 21 Petrov, 22

Druk op een willekeurige toets om door te gaan. . .

Ontwikkel uw eigen klassen voor het werken met bestanden

Het is lastig om voortdurend de methoden write() en read() te gebruiken; het is veel prettiger om de bewerkingen “>” te kunnen gebruiken naar analogie met tekstbestanden. Laten we een voorbeeld geven van de implementatie van onze klasse voor het werken met binaire bestanden.

naamruimte std gebruiken;

structuurvragenlijst //declare een structuur voor het opslaan van informatie

/*overlaad de invoegbewerking in een stream voor aangepaste uitvoer

structureel gegevenstype Vragenlijst naar scherm*/

ostream&-operator

class outBinaryFile: openbaar of stream /^define onze klasse voor het werken met binaire uitvoerbestanden. We leiden het af van de klasse voor het werken met uitvoerbestandsstreams */

/*Vergeet bij het beschrijven van de constructor van een gegenereerde klasse niet de constructor van de basisklasse aan te roepen en de noodzakelijke parameters door te geven*/

outBinaryFile(char* naam) : ofstream(naam, ios::out I ios::binary)

// overlaad de noodzakelijke bewerkingen als klassenmethoden outBinaryFile&-operator

write((char*)&chislo, groottevan(chislo)); retour *dit;

outBinaryFile&-operator

write((char*)&ank, groottevan(ank)); retour *dit;

klasse inpBinaryFile: openbaar als stream /* We definiëren onze klasse voor het werken met binaire invoerbestanden. We leiden het af van de klasse voor het werken met invoerbestandsstreams */

inpBinaryFile(char* naam): ifstream(naam, ios::in I ios::binary)

/*de basisklasseconstructor aanroepen met de benodigde parameters,

voldoende voor de constructor van de afgeleide klasse */

// overbelast de noodzakelijke bewerkingen

inpBinaryFile& operator >> (int& nummer)

read((char*)&chislo, groottevan(chislo)); retour *dit;

inpBinaryFile& operator >> (Anketa& ank)

read((char*)&ank, groottevan(ank)); retour *dit;

int a = 111, b = 112; outBinaryFile outFile("dannye.bin");

//open het bestand om te lezen

inpBinaryFile inpFile("dannye.bin"); als (!inpFile)

voor (int i = 0; ik

inpBestand >> a; //lees het profiel uit het bestand

cout //en geef het weer op het scherm

inpFile >> vragenlijst; uit

Resultaat van het programma:

Kolya, 1990, 582-78-95.

Druk op een willekeurige toets om door te gaan. . .

1. Is het mogelijk om een ​​bewerking in een programma te gebruiken?

ios::in I ios::uit

  • a) ja, in ieder geval;
  • b) ja, maar alleen bij het werken met tekstbestanden;
  • c) nee, in ieder geval.
  • 2. Geef de juiste optie op voor het openen van een tekstbestand om te lezen:
    • a) ifstream inpF("input.txt", ios::in);
    • b) ifstream inpF("input.txt", ios::input);
    • c) ifstream inpF(ios:in, "invoer.txt").

H. Wat wordt er op het scherm weergegeven als gevolg van het uitvoeren van de volgende code?

invoerbestand.get(c);

volgende - inputFile.peek();

als (volgende == EOF)

  • a) de inhoud van het bestand dat bij de inputFile-stream hoort, wordt één keer op het scherm weergegeven;
  • b) de inhoud van het bestand dat bij de inputFile-stream hoort, wordt een oneindig aantal keren op het scherm weergegeven;
  • c) Er wordt niets op het scherm weergegeven.
  • 4. Hoeveel tekens bevat het bestand?
  • 12 3 4 5 6
  • a) 6;
  • b) 7;
  • c) 11.
  • 5. Met welke methoden kunt u het einde van een bestand bepalen?
  • a) eof();
  • b) goed();
  • c) beide methoden.
  • 6. Wat is het doel van de functie getline()?
  • a) leest een woord uit een bestand;
  • b) leest de volledige inhoud van het bestand;
  • c) leest een regel uit een bestand.
  • 7. Om aangepaste gegevenstypen naar een bestand te schrijven/lezen, moet u:
    • a) overbelast de bewerkingen “>>” en “
    • b) het schrijven en lezen van aangepaste gegevenstypen is beschikbaar zonder aanvullende acties;
    • c) het schrijven en lezen van aangepaste gegevenstypen naar het bestand is onmogelijk.
  • 8. Welke functies worden gebruikt om informatie in binaire vorm te schrijven/lezen?
  • a) printf/scanf;
  • b) schrijven / lezen;
  • c) zetten/krijgen.
  • 1. Schrijf een programma dat de letters van het Engelse alfabet naar een bestand schrijft.
  • 2. Het input.txt-bestand bevat informatie uit verschillende tekstregels. Geef de inhoud van dit bestand weer op het scherm, tel het aantal regels in het bestand.
  • 3. De schijf bevat het result.txt-bestand met de resultaten van chemische experimenten. Schrijf een programma dat een kopie van dit bestand maakt met de naam copy_resylt.txt.
  • 4. Voer de bestandsnaam in met behulp van het toetsenbord. Verwijder alle even regels in het opgegeven bestand.
  • 5. Schrijf een programma dat in een tekstbestand alle kleine letters vervangt door hoofdletters, en omgekeerd.
  • 6. Het brontekstbestand bevat cijfers gescheiden door spaties. Genereer twee nieuwe bestanden: de eerste mag alleen even getallen bevatten en de tweede - oneven.
  • 7. Het bestand bevat reële getallen. Schrijf een programma dat het fractionele deel van deze getallen verwijdert en naar een nieuw bestand schrijft.
  • 8. Een tekstbestand bevat informatie over vluchten van luchtvaartmaatschappijen. Selecteer uit deze gegevens vluchten die in de middag vertrekken en geef ze weer op het scherm.
  • 9. Overbelast >> en operators
  • 10. Schrijf uw eigen klasse om met binaire bestanden te werken.
  • 11. Schrijf de lijst met 10 leerlingen in de klas in een tekstbestand en in een binair bestand. Vergelijk deze bestanden. Verklaar het resulterende verschil.
  • 12. Ontwikkel een klasse die informatie over auto's (bouwjaar, merk, kleur, enz.) naar een tekstbestand schrijft. In dit geval wordt elk informatiesymbool vervangen door een eigen ABO 1-code. Geef het resulterende bestand op het scherm weer.

Beveiligingsvragen

  • 1. Welke klassen worden gebruikt om met bestandsstreams te werken?
  • 2. Welke toegangsmodi kunnen worden gebruikt bij het werken met bestanden? Geef voorbeelden.
  • 3. Welke methode wordt gebruikt om een ​​bestand te openen? Geef voorbeelden.
  • 4. Welke bewerkingen zijn beschikbaar voor het werken met bestanden? Welke functies zijn beschikbaar om deze bewerkingen uit te voeren?
  • 5. Met welke methoden kunt u het einde van een bestand bepalen wanneer u er informatie uit leest? Wat is het verschil tussen deze methoden? Geef voorbeelden.
  • 6. Hoe kun je variabelen van standaardgegevenstypen uit tekstbestanden lezen?
  • 7. Is het mogelijk om aangepaste gegevenstypevariabelen uit tekstbestanden te lezen?
  • 8. Welke functies zijn ontworpen om willekeurig informatie uit een bestand te lezen? Geef voorbeelden.
  • 9. Noem de kenmerken van binaire bestanden. Wat zijn de voordelen van het gebruik van dergelijke bestanden?
  • 10. Welke functies kunnen worden gebruikt om informatie in binaire bestanden te schrijven/lezen?
  • 11. Hoe lees ik variabelen van standaardgegevenstypen uit een binair bestand?
  • 12. Met welke overwegingen moet rekening worden gehouden bij het lezen van aangepaste gegevenstypen uit binaire bestanden?
  • "Ivanov", 23), ("Sidorov", 21),

Een binair bestand is elk bestand op uw computer. Alle informatie op een computer en aanverwante media wordt vastgelegd in bits (vandaar de naam). Ter vergelijking: een tekstbestand kan echter worden gelezen in lezers die overeenkomen met de extensie (de eenvoudigste - zelfs in Kladblok), maar een uitvoerbaar bestand niet. En hoewel een txt-bestand in feite hetzelfde binaire bestand is, bedoelen ze, als ze het hebben over het probleem van het openen van de inhoud van binaire bestanden, zowel uitvoerbare bestanden als gecomprimeerde gegevens.

Je zult nodig hebben

  • - Hex Edit-programma.

Instructies

  • Download het Hex Edit-programma naar uw harde schijf - een bestandseditor die de inhoud ervan in binaire vorm weergeeft. Open het programma door te dubbelklikken op het startbestand. Met deze software kunt u binaire bestanden in realtime lezen, inhoud wijzigen, uw eigen gegevens toevoegen en nog veel meer. Om volledig in deze omgeving te kunnen werken, moet u iets weten over de algemene concepten van binaire bestanden.
  • Het programmavenster verschilt niet veel van een gewone editor: vertrouwde menu's en een paneel met knoppen, de hoofdtekst van het bestand dat wordt bewerkt, bladwijzers en een statusbalk. Open het binaire bestand via het menu Bestand of door op het overeenkomstige pictogram op het paneel te klikken. Het binaire bestand verschijnt voor u in de vorm van reeksen met cijfers en letters. Verwar deze tekens niet met afgedrukte gegevens in tekstbestanden. Je kunt ze ook bewerken door tekens te verwijderen, maar in dit geval verwijder je cellen met gegevens, stukjes van het bestand.
  • Breng wijzigingen aan in de inhoud van het bestand. De applicatie kan belangrijke delen van het bestand weergeven om het zoeken te vergemakkelijken, en beschikt ook over flexibele instellingen voor het grafisch weergeven van binaire code. Schakel de inhoudsweergave naar de ASCII+IBM/OEM-modus om de code van het bestand te zien. Als u onjuiste regels in een bestand invoert, werkt het mogelijk niet correct, wat ernstige gevolgen kan hebben voor het besturingssysteem van de pc.
  • Sla uw wijzigingen op. Als u geen ervaring heeft met dit soort bestandsbewerking, wees er dan op voorbereid dat het bestand niet wordt geopend en weigert te werken nadat u wijzigingen hebt aangebracht. Je zult waarschijnlijk een paar kopieën verpesten voordat je het goed hebt. Probeer niet alle wijzigingen in het originele bestand op te slaan, zodat de inhoud ongewijzigd blijft.
  • Beschrijving en interne weergave van bestanden

    De bestanden verschillen van elkaar. Alle bestanden die op een computer zijn opgeslagen, hebben speciale kenmerken, d.w.z. speciale beschrijvingsmethoden waarmee u het ene bestand van het andere kunt onderscheiden: 1) naam; 2) maat; 3) datum en tijd; 4)pictogram.

    Elk bestand heeft een naam: de bestandsnaam. De bestandsnaam beschrijft de inhoud ervan of suggereert waarvoor het kan worden gebruikt. De naam wordt aan het bestand toegewezen wanneer het wordt gemaakt. Dit geldt voor alle bestanden.

    Elk bestand heeft een fysieke grootte. Het bestand neemt wat computergeheugen en wat schijfruimte in beslag.

    Wanneer een bestand wordt gemaakt, plaatst het besturingssysteem er een stempel op met de datum en tijd van creatie. Hiermee kunt u bestanden sorteren op datum en tijd en zo orde op uw computer brengen. De datum en het tijdstip waarop het bestand is bijgewerkt of gewijzigd, worden ook genoteerd.

    Elk bestand is een specifiek type, nauw verwant aan het bestandspictogram dat we zien. Het bestandstype is afhankelijk van de inhoud. Elk programma wijst een specifiek type en bijbehorend pictogram toe aan het gemaakte document.

    Bestandsgrootte wordt gemeten in bytes, net als de geheugencapaciteit.

    De bestandsgrootte kan 0 bytes zijn, wat betekent dat het bestand bestaat maar niets bevat. S De maximale bestandsgrootte is 4 GB. Maar zulke grote bestanden zijn zeer zeldzaam.

    De ingebouwde klok van de computer is met name nodig om aan bestanden de tijd en datum toe te wijzen waarop ze zijn gemaakt. Dit verklaart hoe belangrijk het is om deze klok correct in te stellen. Er zijn ook extra attributen om bestanden te beschrijven, zoals systeembestanden, verborgen bestanden, alleen-lezen bestanden, archiefbestanden, enz. Het besturingssysteem regelt dit zelf.

    Elk bestand heeft een unieke index. De index bevat de informatie die elk proces nodig heeft om toegang te krijgen tot het bestand. Verwerkt toegangsbestanden met behulp van een goed gedefinieerde reeks systeemaanroepen en identificeert het bestand met een reeks tekens die fungeert als een gekwalificeerde bestandsnaam. Elke samengestelde naam identificeert op unieke wijze een bestand, waardoor de kernel de naam omzet in een bestandsindex. De index bevat een tabel met adressen waar bestandsinformatie zich op schijf bevindt. Omdat elk blok op een schijf een eigen nummer heeft, bevat deze tabel een verzameling schijfbloknummers. Om de flexibiliteit te vergroten, voegt de kernel een bestand blok voor blok toe, waardoor de informatie over het bestand door het bestandssysteem kan worden verspreid. Maar deze lay-out bemoeilijkt het zoeken naar gegevens. De adrestabel bevat een lijst met bloknummers met informatie die bij een bestand hoort, maar eenvoudige berekeningen laten zien dat een lineaire lijst met bestandsblokken in een index moeilijk te beheren is. Om ervoor te zorgen dat de kleine indexstructuur het werken met grote bestanden mogelijk maakt, wordt de tabel met schijfblokadressen in lijn gebracht met de structuur.

    Tekst- en binaire bestanden

    Met bestanden kan de gebruiker grote hoeveelheden gegevens rechtstreeks van de schijf lezen zonder deze via het toetsenbord in te voeren. Er zijn twee hoofdtypen bestanden: tekst en binair.

    Tekst bestanden die uit willekeurige tekens bestaan, worden aangeroepen. Ze zijn georganiseerd in lijnen, die elk eindigen met het personage " einde van de regel". Het einde van het bestand zelf wordt aangegeven door het symbool " einde van bestand". Wanneer u informatie naar een tekstbestand schrijft, dat met elke teksteditor kan worden bekeken, worden alle gegevens geconverteerd naar een tekentype en in tekenvorm opgeslagen.

    In binair X bestanden informatie wordt gelezen en geschreven in de vorm van blokken van een bepaalde grootte, waarin gegevens van elk type en structuur kunnen worden opgeslagen.

    Om met bestanden te kunnen werken worden speciale datatypes genoemd stromen. De ifstream-stream wordt gebruikt om met bestanden in de leesmodus te werken, en ifstream wordt gebruikt in de schrijfmodus. Om met bestanden in zowel schrijf- als leesmodus te werken, wordt de ifstream-stream gebruikt.

    In C++-programma's moet u bij het werken met tekstbestanden de ifstream- en iostream-bibliotheken opnemen.

    Om gegevens naar een tekstbestand te schrijven, moet u: 1)beschrijf een typevariabele vanstroom open; 3) informatie naar een bestand uitvoeren; 4) Zorg ervoor dat u het bestand sluit.

    Om gegevens uit een tekstbestand te lezen, moet u:

    1)beschrijf een typevariabele alsstroom; 2) open het bestand met behulp van de functie open; 3) informatie uit een bestand lezen; bij het lezen van elk gegevensfragment moet worden gecontroleerd of het einde van het bestand is bereikt; 4) sluit het bestand.

    Opgemerkt moet worden dat in alle hierboven besproken voorbeelden de functie fopen() in de modi “r” en “w” een tekstbestand opent voor respectievelijk lezen en schrijven. Dit betekent dat sommige tekstopmaaktekens, zoals de regelterugloop '\r', niet als afzonderlijke tekens kunnen worden gelezen; ze bestaan ​​mogelijk niet in het bestand, maar ze zijn er wel. Dit is een functie van de tekstmodus van het bestand. Voor meer “fijn” werken met bestandsinhoud is er een binaire modus die de bestandsinhoud weergeeft als een reeks bytes, waarbij alle mogelijke besturingscodes slechts getallen zijn. In deze modus is het mogelijk om controletekens te verwijderen of toe te voegen die niet beschikbaar zijn in de tekstmodus. Om een ​​bestand in binaire modus te openen, wordt ook de functie fopen() gebruikt, waarbij de laatste parameter gelijk is aan respectievelijk “rb” en “wb”, voor lezen en schrijven.

    Bestanden. Bovendien zijn tekstbestanden, vanuit het oogpunt van technische implementatie op hardwareniveau, een speciaal geval van binaire bestanden, en dus voldoet elk bestand in de brede zin van het woord aan de definitie van “binair bestand”.

    Over het algemeen vertegenwoordigt deze term een ​​maatstaf voor de relatie tussen de consument van een binair bestand en het bestand zelf. Als de consument de structuur en regels kent waarmee hij een bepaald bestand naar een bestand op een hoger niveau kan converteren, dan is het voor hem niet binair. Uitvoerbare bestanden zijn bijvoorbeeld binair voor de computergebruiker, maar niet binair voor het besturingssysteem. [ ]

    Visualisatie

    Om een ​​binair bestand visueel weer te geven, wordt het opgedeeld in stukken van gelijke grootte, weergegeven als getallen, meestal geschreven in hexadecimaal, soms in octaal, binair of decimaal. De aangegeven chunkgrootte kan gelijk zijn aan één octet, maar ook aan twee of vier (in het geval van opsplitsing in chunks van meerdere octetten wordt de bytevolgorde gebruikt die op het gebruikte platform is aangenomen). De afhankelijkheid van het bereik van weergegeven getallen van de grootte van het stuk wordt weergegeven in de tabel:

    octetten aantal bits hexadecimaal octaal decimale
    niet ondertekend
    decimale
    iconisch
    1 8 00

    FF
    000

    377
    0

    255
    -128

    127
    2 16 0000

    FFFF
    000000

    177777
    0

    65535
    -32768

    32767
    4 32 00000000

    FFFFFFFF
    00000000000

    37777777777
    0

    4294967295
    -2147483648

    2147483647

    Vaak worden naast de numerieke bytewaarden ook codepaginatekens, zoals ASCII, uitgevoerd. Het volgende voorbeeld toont de zogenaamde. klassieke dump(hexadecimale weergave van 16 bytes per regel, met afdrukbare ASCII-tekens aan de rechterkant) van het begin van het Wikipedia-logo PNG-bestand:

    00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR| 00000010 00 00 00 87 00 00 00 a0 08 03 00 00 00 11 90 8f |............| 00000020 b6 00 00 00 04 67 41 4d 41 00 00 d6 d8 d4 4f 58 |.....gAMA.....OX| 00000030 32 00 00 00 19 74 45 58 74 53 6f 66 74 77 61 72 |2....tEXtSoftwar| 00000040 65 00 41 64 6f 62 65 20 49 6d 61 67 65 52 65 61 |e.Adobe ImageRea| 00000050 64 79 71 c9 65 3c 00 00 03 00 50 4c 54 45 22 22 |dyq.e<....PLTE""| 00000060 22 56 56 56 47 47 47 33 33 33 30 30 30 42 42 42 |"VVVGGG333000BBB| 00000070 4b 4b 4b 40 40 40 15 15 15 4f 4f 4f 2c 2c 2c 3c |KKK@@@...OOO,<| 00000080 3c 3c 3e 3e 3e 3a 39 39 04 04 04 1d 1d 1d 35 35 |<<>>>:99......55| 00000090 35 51 50 50 37 37 37 11 11 11 25 25 25 0d 0d 0d |5QPP777...%%%...| 000000a0 27 27 27 1a 1a 1a 38 38 38 2a 2a 2a 08 08 08 20 |"""...888**... | 000000b0 20 20 17 17 17 2e 2e 2e 13 13 13 bb bb bb 88 88 | . ............|

    Hulpmiddelen

    Voor visualisatie

    • debuggen (op Microsoft Windows, gedeeltelijk)
    • hexdump (op FreeBSD, GNU/Linux, enz.)

    Voor bewerken

    • HEX-editor
      • beye (voor alle besturingssystemen, gratis software)
      • hiew (voor DOS, Microsoft Windows, Windows NT)
      • WinHex (voor Windows)

    U bent de termen 'tekst' en 'binair' waarschijnlijk al tegengekomen tijdens het lezen van enkele artikelen over . En ze besloten dat dit allemaal te ingewikkeld voor je was, dat het nooit mogelijk zou zijn om er achter te komen, dus verdiepten ze zich er niet in en gaven het op.

    We zullen proberen alles in de eenvoudigst mogelijke bewoordingen uit te leggen, omdat dergelijke informatie nuttig is voor elke gebruiker, zelfs voor de meest onervaren, omdat deze rechtstreeks verband houdt met de basisprincipes van computerbeveiliging.

    Een beetje theorie

    Het tekstbestand bevat ASCII-tekens (de afkorting staat voor American Standard Code for Information Interchange, zoiets als “American Standard Code for Information Interchange”).

    In feite is ASCII een tabel waarin aan elke letter, cijfer, leesteken en verschillende “honden” met “sneeuwvlokken” (in de zin van @ en *) één byte wordt toegewezen. Dat wil zeggen, acht nullen en enen (bits). Plus natuurlijk controletekens zoals nieuwe regel.

    Een programma voor het openen van bestanden met ASCII-tekens zet bytes om in letters, cijfers en andere afdrukbare tekens op het display. Natuurlijk moet de software dat deel van de tabel begrijpen dat overeenkomt met de Russische taal, maar dit is al een kwestie van coderen.

    In een binair bestand zijn nullen en enen gerangschikt in reeksen die niet noodzakelijkerwijs nodig zijn om teksten weer te geven (hoewel er enkele zijn, bijvoorbeeld *doc). Waarom, vraag je. Het antwoord is simpel: voor al het andere. Programma's, films, muziek, afbeeldingen - elk formaat heeft zijn eigen structurele principes voor het organiseren van gegevens.

    Het woord ‘binair’ zelf betekent ‘bestaande uit twee componenten’, ‘dubbel’. Het is inderdaad mogelijk om slechts twee componenten duidelijk te definiëren: nul en één, bits, "stenen" waaruit het bestand is samengesteld. De betekenis van al het andere kan alleen verschijnen tijdens het opstarten (openen, afspelen).

    De verkeerde kant van de digitale wereld

    U kunt in het binaire bestand kijken met een speciaal programma: een HEX-editor. (Van het woord Hexadecimaal, dat het hexadecimale getalsysteem aangeeft.) Dergelijke software toont bytes in de vorm van hun HEX-aanduidingen, die zich feitelijk ook in de vorm van een tabel (matrix) bevinden.

    De bytes van een afbeelding in JPEG-indeling, een gewone afbeelding of foto, worden in het editorvenster bijvoorbeeld weergegeven als FF D8 FF 00 04 3A 29 enzovoort.

    Een specialist zal begrijpen dat de reeks bytes FF D8 helemaal aan het begin aangeeft dat dit een JPEG is. Maar dit alles is niet zo interessant voor niet-specialisten.

    U kunt ook een tekstbestand openen in een HEX-editor om te zien welke bytes overeenkomen met bepaalde letters (ASCII-tekens). Maar alleen uit nieuwsgierigheid: het heeft nog steeds geen zin.

    Maar binaire bestanden worden soms voor heel betekenisvolle en specifieke doeleinden in hexadecimaal formaat bekeken. Azoeken bijvoorbeeld naar kwaadaardige code die op deze manier aan de hoofdcode wordt toegevoegd. Laten we trouwens verder gaan met de beveiligingskwesties.

    Wat kan kwaad

    Een tekstbestand kan niets anders bevatten dan ASCII-tekens. Programma's zijn echter niet alleen binair, maar bestaan ​​ook uit de bovenstaande symbolen. Ik bedoel natuurlijk scripts.

    Met andere woorden: het *txt-bestand is in principe niet geïnfecteerd en vormt geen bedreiging. En als er een script in een tekstbestand staat, kan dit veel problemen veroorzaken.

    Het *bat-bestand bevat bijvoorbeeld de code van verschillende opdrachten en wordt gestart door te dubbelklikken, net als een gewoon programma. Die commando's zijn geschreven in ASCII-tekens, maar het besturingssysteem weet hoe het ze moet interpreteren: zet ze om in nullen en enen die typisch zijn voor programma's.

    Maar je klikt natuurlijk niet op onbekende bat-bestanden, toch? Dat is goed.

    Eerdere publicaties:

    Laatste wijziging: 06-11-2012 14:45:16

    Materiaallabels: ,