HEXEDIT
-
Hallo!
Kennt ihr das Programm Hexedit.Für die die es nicht kennen:Hexedit zeigt die Nullen und Einsen jeder Datei(auch Progamme)egal welchen Formats als HEXadezimale Zahlen an und versucht sie als ASCIIzeichen darzustellen.
Meine Frage:Kann ich über ein selbstgeschreibenes Programm die Hexfolge in Hexedit bearbeiten(nach Teilstrings suchen,vergleichen...)
-
natürlich geht das. Du musst die Datei einfach ein ein Array of char laden und schon
kannst du mit den Daten machen was du willst.Ich hab mir eine sehr praktische Routine geschrieben um nach Pattern in Dateien
su suchen:bool __fastcall TForm1::MaskSearch(unsigned char * cSearchFile, int iSearchFileLen, const int * cMask, int & iFoundAddress, int & iFoundCounter, int iStart, int iStep) { /* Eingabe: cSearchFile = array of char, dass durchsucht werden soll iSearchFileLen = die Grösse des zu durchsuchenden array of char cMask = Maske nach der gesucht werden soll. -1 = Byte ignorieren -2 = Ende der Maske Ausgabe: iFoundAddress = an welcher Adresse wurde die Maske zuletzt gefunden? iFoundCounter = wie oft wurde die Maske insgesammt gefunden? MaskSearch = true -> genau einmal gefunden MaskSearch = false -> mehr als einmal oder nicht gefunden. */ iFoundCounter=0; int iMaskLen=-1; while (cMask[++iMaskLen] != -2); bool bFound; for (int i = iStart; i < iSearchFileLen - iMaskLen; i+=iStep) { bFound = true; int iMaskPos=0; for (int ii = i; ii < i + iMaskLen; ii++) { if (cMask[iMaskPos] != -1) { // wenn das Maskenbyte eine Rolle spielt. if (cSearchFile[ii] != cMask[iMaskPos]) { // wenn das Maskenbyte nicht übereinstimmt bFound = false; ii = i + iMaskLen; } } iMaskPos++; } if (bFound) { // gefunden iFoundAddress = i; iFoundCounter++; } } if (iFoundCounter == 1) return true; // in der ganzen Datei nicht oder mehrmals gefunden. return false; }Beispiel:
Dieser Aufruf sucht nach NOP's in einem C166 File (ja ja, die Handys ;))
int iMask [] = { 0xCC, 0x00, -2 }; int iFoundAddress, iFoundCounter; MaskSearch(cFile, 0x1000000, iMask, iFoundAddress, iFoundCounter, 0, 2);
-
Danke schon mal!
Weisst du auch wie man eine Datei öffnet und dann in ein char Array lädt?
-
die Suche ist bei solchen sachen sehr hilfreich!
http://www.c-plusplus.net/forum/viewtopic.php?t=66793&highlight=datei+�ffnen