Invoering
Een hex dump is een hexadecimaal weergave van gegevens. U kunt hexadecimaal gebruiken bij het debuggen van een programma of voor het reverse engineeren van een programma.
Veel bestandsindelingen hebben bijvoorbeeld specifieke hexadecimale tekens om hun type aan te duiden. Als u probeert een bestand te lezen met behulp van een programma en het om de een of andere reden niet correct wordt geladen, is het mogelijk dat het bestand niet het formaat heeft dat u verwacht.
Als je wilt zien hoe een programma werkt en je hebt niet de broncode of het stuk software dat de code reverse-engineert, kun je naar de hex dump kijken om te proberen uit te zoeken wat er aan de hand is.
Wat is hexadecimaal?
Computers denken in binair. Elk teken, nummer en symbool wordt verwezen door een binaire of meerdere binaire waarden.
Mensen hebben echter de neiging om in decimalen te denken.
duizenden | honderden | tientallen | eenheden |
1 | 0 | 1 | 1 |
Als mensen worden onze laagste getallen eenheden genoemd en vertegenwoordigen de getallen 0 tot 9. Wanneer we bij 10 komen, zetten we de eenheidskolom terug naar 0 en voegen 1 toe aan de tienerkolom (10).
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
In binair getal vertegenwoordigt het laagste getal alleen 0 en 1. Wanneer we voorbij 1 komen, plaatsen we een 1 in de kolom 2 en een 0 in de kolom 1. Als u 4 wilt weergeven, plaatst u een 1 in de kolom 4 en reset u de kolommen 2 en 1.
Dus om 15 te vertegenwoordigen zou je 1111 hebben wat staat voor 1 acht, 1 vier, 1 twee en 1 één. (8 + 4 + 2 + 1 = 15).
Als we een gegevensbestand in binair formaat zouden bekijken, zou het absoluut enorm zijn en vrijwel onmogelijk om te begrijpen.
De volgende stap omhoog van het binaire bestand is octaal, waarbij 8 wordt gebruikt als het basisnummer.
24 | 16 | 8 | 1 |
0 | 1 | 1 | 0 |
In een octaal systeem gaat de eerste kolom van 0 tot 7, de tweede kolom is 8 tot 15, de derde kolom 16 tot 23 en de vierde kolom 24 tot 31 enzovoort. Hoewel het over het algemeen gemakkelijker te lezen is dan binair, gebruiken de meeste mensen hexadecimaal.
Hexadecimaal gebruikt 16 als het basisnummer. Dit is waar het verwarrend wordt, omdat we mensen beschouwen als getallen van 0 tot en met 9.
Dus wat wordt er gebruikt voor 10, 11, 12, 13, 14, 15? Het antwoord is letters.
- 0 = 0
- 1 = 1
- 2 = 2
- 3 = 3
- 4 = 4
- 5 = 5
- 6 = 6
- 7 = 7
- 8 = 8
- 9 = 9
- 10 = A
- 11 = B
- 12 = C
- 13 = D
- 14 = E
- 15 = F
De waarde 100 wordt daarom weergegeven met 64. U hebt 6 van de 16-kolommen nodig die 96 en vervolgens 4 in de kolom Eenheid 100 opleveren.
Alle tekens in een bestand worden aangegeven met een hexadecimale waarde. Wat deze waarden betekenen, hangt af van het formaat van het bestand zelf. Het formaat van het bestand wordt aangegeven met hexadecimale waarden die meestal aan het begin van het bestand worden opgeslagen.
Met kennis van de reeks hexadecimale waarden die aan het begin van bestanden wordt weergegeven, kunt u handmatig bepalen in welke indeling het bestand zich bevindt. Door een bestand in een hexadecimale dump te bekijken, kunt u verborgen tekens vinden die niet worden weergegeven wanneer het bestand is geladen in een normale teksteditor.
Hoe maak je een Hex Dump maken met behulp van Linux
Gebruik de hexdump-opdracht om een hex dump te maken met Linux.
Om een bestand als hexadecimaal op de terminal weer te geven (standaarduitvoer) voert u de volgende opdracht uit:
hexdump bestandsnaam
Bijvoorbeeld
hexdump image.png
De standaarduitvoer geeft het regelnummer (in hexadecimaal formaat) en vervolgens 8 sets van 4 hexadecimale waarden per regel weer.
Bijvoorbeeld:
00000000 5089 474e 0a0d 0a1a 0000 0d00 4849 5244
U kunt verschillende schakelaars leveren om de standaarduitvoer te wijzigen. Als u bijvoorbeeld de minus b-schakelaar opgeeft, wordt een 8-cijferige verschuiving geproduceerd gevolgd door 16 drie kolommen, nul gevuld, bytes invoergegevens in octaal formaat.
hexdump -b image.png
Daarom wordt het bovenstaande voorbeeld nu als volgt weergegeven:
00000000 211 120 116 107 015 012 032 012 000 000 000 015 111 110 104 122
Het bovenstaande formaat staat bekend als één-byte octale weergave.
Een andere manier om het bestand te bekijken is in een weergave van één byte met de min-c-schakelaar.
hexdump -c image.png
Dit geeft opnieuw de offset weer, maar deze keer gevolgd door zestien spatie gescheiden, drie kolom, spatie gevulde karakters van invoergegevens per regel.
Andere opties zijn Canonical hex + ascii-weergave die kan worden weergegeven met de min-C-schakelaar en een twee-byte decimale weergave die kan worden weergegeven met de minus-d-schakelaar. De minus o-schakelaar kan worden gebruikt om een octaal display van twee bytes weer te geven. Ten slotte kan de schakelaar minux x worden gebruikt om een hexadecimaal weergave van twee bytes weer te geven.
hexdump -C image.png
hexdump -d image.png
hexdump -o image.png
hexdump -x image.png
Als geen van de bovenstaande formaten aan uw behoeften voldoet, gebruikt u de min-e-schakelaar om het formaat op te geven.
Als u weet dat een gegevensbestand erg lang is en u wilt alleen de eerste paar tekens zien om het type te bepalen, kunt u de schakeloptie -n gebruiken om aan te geven hoeveel van het bestand in hex wordt weergegeven.
hexdump -n100 image.png
Het bovenstaande commando geeft de eerste honderd bytes weer.
Als u een deel van het bestand wilt overslaan, kunt u de minus-schakelaar gebruiken om een offset in te stellen om vanaf te starten.
hexdump -s10 image.png
Als u geen bestandsnaam opgeeft, wordt de tekst gelezen van de standaardinvoer.
Voer eenvoudig de volgende opdracht in:
hexdump
Voer vervolgens de tekst in de standaardinvoer in en eindig door stop te typen. De hex wordt weergegeven op de standaarduitvoer.
Samenvatting
Het hexdump-hulpprogramma is duidelijk een redelijk krachtig hulpmiddel en je moet zeker de handleidingpagina lezen om alle functies volledig onder de knie te krijgen.
Je hebt ook een goed begrip nodig van wat je zoekt bij het lezen van de uitvoer.
Om de handleidingpagina te bekijken voert u de volgende opdracht uit:
man hexdump