Autor Thema: Hex-Viewer (?)  (Gelesen 10843 mal)

Offline Delo Cor

  • Draconis Lunaris
  • Mumie
  • *
  • Beiträge: 203
    • Profil anzeigen
Hex-Viewer (?)
« am: 20.Mär.09, 18:09:09 »
Und nun um Cherus Aufgabenstellung etwas mehr Übersicht zu verschaffen...
Sein Auftrag war: Öffne Datei, springe zu stelle x, Lese paar bytes, gib sie im hex-format aus

Soweit so,so gut.Klingt nach einem kleinen aber feinen Hex-Viewer(für die Konsole).
Meine Python-Lösung wäre wie folgt:
Zitat von: Delos Python-Lösung V0.2-Konsole
from __future__ import with_statement
import os.path
import optparse


parseobj=optparse.OptionParser()
parseobj.add_option('-p',type='string',dest='path',help="path to file e.g. C:/file.txt")
parseobj.add_option('-s',type='int',dest='pos',help="Position to start")
parseobj.add_option('-r',type='int',dest='read',help="bytes to read e.g ")
options,remainder=parseobj.parse_args()

with open(options.path,'rb') as f:
    try:
        f.seek(options.pos)
    except TypeError:
        raise TypeError,"-s parameter is incorrect/missing!"
    if options.read:
        output=f.read(options.read)
    else:
        output=f.read()
   
    if output == '':
        print "end of file reached! Max.Length: %i" %os.path.getsize(f.name)
    else:
        print output.encode("hex")
   
raw_input("press enter to quit...")

Usage: hexfromfile.exe [options]

Options:
  -h, --help  show this help message and exit
  -p PATH     path to file e.g. C:/file.txt
  -s POS      Position to start
  -r READ     bytes to read e.g

Link zur .exe : http://rapidshare.com/files/211507207/hexfromfile.zip
py-Datei im Anhang(auch bei der exe dabei) ->für Linix-User wäre das wohl besser.
Python 2.5 wäre wegen des with-statements minimale Voraussetzung. ( Python 3k wäre falsch,weil es keine Rückwärtskompatibilität zu den 2.X Versionen besitzt)
« Letzte Änderung: 20.Mär.09, 18:45:39 von Delo Cor »

Offline Cherubim

  • Draconis Lunaris
  • Foren-Legende
  • *
  • Beiträge: 1.047
  • Edward
    • Profil anzeigen
Re: Hex-Viewer (?)
« Antwort #1 am: 20.Mär.09, 19:20:44 »
Das Problem bei Python:
Es kann nicht ohne Interpreter laufen.

Wie ich mittlerweile weiß, hatte ich mich in meinen C++ Prog ver-pointert, darum kam bei der Wandlung kacke raus.
Rick Astley will NEVER: 1. Give you up 2. Let you down 3. Run around 4. Desert you 5. Make you cry 6. Say goodbye 7. Tell a lie 8. Hurt you

Offline Delo Cor

  • Draconis Lunaris
  • Mumie
  • *
  • Beiträge: 203
    • Profil anzeigen
Re: Hex-Viewer (?)
« Antwort #2 am: 20.Mär.09, 19:25:23 »
Man kann aber Python-Skripte mit dem Modul py2exe in exe Dateien kompilieren.
Das Endprodukt meines Skripts kannst du ja auf RS runterladen und ausprobieren. Es ist eine exe mit dll und sonstigen Abhängigkeiten,die ca. 3MB groß ist.(einziger Nachteil daran)
Damit läuft es auch ohne Interpreter.

Offline Isami

  • Draconis Lunaris
  • Foren-Legende
  • *
  • Beiträge: 256
    • Profil anzeigen
Re: Hex-Viewer (?)
« Antwort #3 am: 21.Mär.09, 01:20:59 »
Das Problem bei Python:
Es kann nicht ohne Interpreter laufen.

Wie ich mittlerweile weiß, hatte ich mich in meinen C++ Prog ver-pointert, darum kam bei der Wandlung kacke raus.
oh, klar, standard-fehler :)

warum hast dir hex-umschreiber eigentlich nicht selbst geschrieben?
byteweise reinleisen und hex draus machen :>
1 byte --> 2 hexzahlen
musst einfach das byte dezimal rauslesen, und mit ganzzahliger division durch 16 mit Rest (die reste sind die hex werte) beommst die lösung
kurze schleife für die 4,7gb und fertig

Offline Cherubim

  • Draconis Lunaris
  • Foren-Legende
  • *
  • Beiträge: 1.047
  • Edward
    • Profil anzeigen
Re: Hex-Viewer (?)
« Antwort #4 am: 21.Mär.09, 10:08:23 »
Ich will ja nicht 4,7GB lesen, sondern 2 Byte aus 4,7GB  ;D

Ich denke aber mittlerweile das ich der Lösung sehr nahe bin.
Wenn ich fertig bin poste ich den Code mal zur Revision.
Rick Astley will NEVER: 1. Give you up 2. Let you down 3. Run around 4. Desert you 5. Make you cry 6. Say goodbye 7. Tell a lie 8. Hurt you

Offline Delo Cor

  • Draconis Lunaris
  • Mumie
  • *
  • Beiträge: 203
    • Profil anzeigen
Re: Hex-Viewer (?)
« Antwort #5 am: 21.Mär.09, 21:18:38 »
woah,da ist ja mein Skript richtig "ausgereift"!
haut genau hin,wenn man per Konsole sagt wo man anfängt und wie viel gelesen werden sollen.
Das nenn ich Bestleistung!  :P

Ich frag mich,wie viel Code man in C für eine Konsolen-Anwendung dieser Art brauchen würde...

Offline Isami

  • Draconis Lunaris
  • Foren-Legende
  • *
  • Beiträge: 256
    • Profil anzeigen
Re: Hex-Viewer (?)
« Antwort #6 am: 22.Mär.09, 12:10:47 »
recht wenig zeilen :)
gleichviel oder bisschen weniger würd ich sagen

kommt drauf an, ob du MFC klassen nimmst, oder pures C programmierst. Mit purem C, kannst es sicher auf wenige zeilen optimieren :>

Offline Delo Cor

  • Draconis Lunaris
  • Mumie
  • *
  • Beiträge: 203
    • Profil anzeigen
Re: Hex-Viewer (?)
« Antwort #7 am: 22.Mär.09, 18:07:00 »
Demonstration!

Offline Cherubim

  • Draconis Lunaris
  • Foren-Legende
  • *
  • Beiträge: 1.047
  • Edward
    • Profil anzeigen
Re: Hex-Viewer (?)
« Antwort #8 am: 23.Mär.09, 10:47:10 »
Ich habe jetzt

#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
    char * rvmfile;
    cout << "There were " << argc << " parameters\n";
    if (argc==2) {
       rvmfile = new char [strlen(argv[1])+1];
       rvmfile = argv[1];
       cout << rvmfile << "\n";
    }
    else {
         cout << "No Filename specified\n";
         system("PAUSE");
         return EXIT_FAILURE;
    }

    int length = 2;
    char readbuffer[3] ;

    ifstream  rvm;
    rvm.open (rvmfile, ios::binary);
    rvm.seekg (2,ios::beg);
    rvm.read (readbuffer,length);
    rvm.close();

    cout.write (readbuffer,length) << endl;

    char output[12] = "";
    char * buffer = output;
    for(int i = 0; i < strlen(readbuffer) ;i++ )
    {
        sprintf(buffer, "%x", readbuffer[i]);
        buffer +=2;
    }

    cout << output << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

Das funzt soweit auch - bei normalen Dateien. Kaum habe ich aber total dämliche Hexwerte wie z.B. FC läuft das Proggi Amok :((

Haylp!
Rick Astley will NEVER: 1. Give you up 2. Let you down 3. Run around 4. Desert you 5. Make you cry 6. Say goodbye 7. Tell a lie 8. Hurt you

Offline Cherubim

  • Draconis Lunaris
  • Foren-Legende
  • *
  • Beiträge: 1.047
  • Edward
    • Profil anzeigen
Re: Hex-Viewer (?)
« Antwort #9 am: 23.Mär.09, 11:57:22 »
Ich habe mal ne Datei angehängt. Aus dieser soll dann der Wert FC41 rauskommen

Delos Proggi:

hexfromfile.exe -p c:\test.hex -s 3 -r 2
fc41
press enter to quit...


Braver Delo
« Letzte Änderung: 23.Mär.09, 12:01:32 von Cherubim »
Rick Astley will NEVER: 1. Give you up 2. Let you down 3. Run around 4. Desert you 5. Make you cry 6. Say goodbye 7. Tell a lie 8. Hurt you

Offline Isami

  • Draconis Lunaris
  • Foren-Legende
  • *
  • Beiträge: 256
    • Profil anzeigen
Re: Hex-Viewer (?)
« Antwort #10 am: 23.Mär.09, 13:36:48 »
bist dir mit %x sicher?
war das nciht %X ??

Offline Cherubim

  • Draconis Lunaris
  • Foren-Legende
  • *
  • Beiträge: 1.047
  • Edward
    • Profil anzeigen
Re: Hex-Viewer (?)
« Antwort #11 am: 23.Mär.09, 14:02:08 »
ist egal, gibt nurnen unterschiedlichen case aus.

hast du Plan was bei mir schief läuft?
Rick Astley will NEVER: 1. Give you up 2. Let you down 3. Run around 4. Desert you 5. Make you cry 6. Say goodbye 7. Tell a lie 8. Hurt you

Offline Delo Cor

  • Draconis Lunaris
  • Mumie
  • *
  • Beiträge: 203
    • Profil anzeigen
Re: Hex-Viewer (?)
« Antwort #12 am: 23.Mär.09, 14:03:52 »
Ich habe mal ne Datei angehängt. Aus dieser soll dann der Wert FC41 rauskommen

Delos Proggi:

hexfromfile.exe -p c:\test.hex -s 3 -r 2
fc41
press enter to quit...


Braver Delo
:o

Das Problem in der hex-datei liegt wohl bei den Sonderzeichen,die du drin hast.(ü)
wie werden diese berücksichtigt?

argh,ich versteh diesen C-code nicht.werden die daten einfach nur eingelesen und ausgespuckt? ich finde keine Stelle,wo ge-"hext" wird.

Offline Cherubim

  • Draconis Lunaris
  • Foren-Legende
  • *
  • Beiträge: 1.047
  • Edward
    • Profil anzeigen
Re: Hex-Viewer (?)
« Antwort #13 am: 23.Mär.09, 14:11:43 »
da

for(int i = 0; i < strlen(readbuffer) ;i++ )
    {
        sprintf(buffer, "%x", readbuffer);
        buffer +=2;
    }
Rick Astley will NEVER: 1. Give you up 2. Let you down 3. Run around 4. Desert you 5. Make you cry 6. Say goodbye 7. Tell a lie 8. Hurt you

Offline Delo Cor

  • Draconis Lunaris
  • Mumie
  • *
  • Beiträge: 203
    • Profil anzeigen
Re: Hex-Viewer (?)
« Antwort #14 am: 23.Mär.09, 15:47:32 »
hast du schonmal probiert das ganze mal als string ausgeben zulassen?
bei mir gibt es nur ein paar Zeichen aus der Mitte und eins am Ende aus.
Ich habe nur den sprintf teil verändert in c oder s und als Beispiel eine txt.datei mit "asdasd" einlesen lassen.->da mit newline d war das ergebnis.
bei deiner hex-datei kommt nur ³ und newline raus.

strange...