@Draconis Lunaris

Öffentlich => [O] Off-Topic und Gäste => Thema gestartet von: Delo Cor am 20.Mär.09, 18:09:09

Titel: Hex-Viewer (?)
Beitrag von: Delo Cor 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 (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)
Titel: Re: Hex-Viewer (?)
Beitrag von: Cherubim 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.
Titel: Re: Hex-Viewer (?)
Beitrag von: Delo Cor 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.
Titel: Re: Hex-Viewer (?)
Beitrag von: Isami 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
Titel: Re: Hex-Viewer (?)
Beitrag von: Cherubim 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.
Titel: Re: Hex-Viewer (?)
Beitrag von: Delo Cor 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...
Titel: Re: Hex-Viewer (?)
Beitrag von: Isami 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 :>
Titel: Re: Hex-Viewer (?)
Beitrag von: Delo Cor am 22.Mär.09, 18:07:00
Demonstration!
Titel: Re: Hex-Viewer (?)
Beitrag von: Cherubim 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!
Titel: Re: Hex-Viewer (?)
Beitrag von: Cherubim 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
Titel: Re: Hex-Viewer (?)
Beitrag von: Isami am 23.Mär.09, 13:36:48
bist dir mit %x sicher?
war das nciht %X ??
Titel: Re: Hex-Viewer (?)
Beitrag von: Cherubim am 23.Mär.09, 14:02:08
ist egal, gibt nurnen unterschiedlichen case aus.

hast du Plan was bei mir schief läuft?
Titel: Re: Hex-Viewer (?)
Beitrag von: Delo Cor 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.
Titel: Re: Hex-Viewer (?)
Beitrag von: Cherubim am 23.Mär.09, 14:11:43
da

for(int i = 0; i < strlen(readbuffer) ;i++ )
    {
        sprintf(buffer, "%x", readbuffer);
        buffer +=2;
    }
Titel: Re: Hex-Viewer (?)
Beitrag von: Delo Cor 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...
Titel: Re: Hex-Viewer (?)
Beitrag von: Cherubim am 23.Mär.09, 16:30:16
jup. er liest das "ü" als sonstwas
Titel: Re: Hex-Viewer (?)
Beitrag von: Isami am 24.Mär.09, 01:11:38
müsstest mit richtigem charset dann rauslesen

müsst in c++ so ne funktion gebn, damit er das auch macht :)
Titel: Re: Hex-Viewer (?)
Beitrag von: Cherubim am 24.Mär.09, 09:11:00
was soll das denn für eine Kacke sein?
Ich sage open binary und der will ein characterset????
Titel: Re: Hex-Viewer (?)
Beitrag von: Isami am 24.Mär.09, 10:14:38
jein
er intepretiert das ü halt als irgendwas

der binäre wert stimmt schon, nur angezeigt wirds halt als irgendwas
Titel: Re: Hex-Viewer (?)
Beitrag von: Cherubim am 24.Mär.09, 14:45:44
Folgender Wandlungscode funzt:

char * buffer = output;
    for(int i = 0; i < length ;i++ )
    {
        int next = (reinterpret_cast<unsigned char*>(readbuffer));
        sprintf(buffer, "%02x", next);
        buffer +=2;
    }
    buffer[0] = '\0';



Damit ist es bewiesen: C++ ist scheiße
Titel: Re: Hex-Viewer (?)
Beitrag von: Isami am 25.Mär.09, 10:08:08

problem dabei is (hat java z.B. noch sclhimmer, weil da kannst gar nix binary lesen, zumindest nicht richtig dann auf Bit-Ebene werken), dass char und byte nicht das selbe sind ;)
Titel: Re: Hex-Viewer (?)
Beitrag von: Delo Cor am 25.Mär.09, 13:52:57
Damit ist es bewiesen: C++ ist scheiße
Willkommen in der Welt C-demprimierter Nerds!

Du kannst ja schonmal ein paar Videotutorials zu Python auf ShowMeDo (http://showmedo.com/videos/series?name=pythonHollandIntroToPythonSeries_german) ansehen. Das eine habe ich mir auch angesehen und kam so auf Python. Die anderen Tutorials zu Python sind auch ganz gut.
Titel: Re: Hex-Viewer (?)
Beitrag von: Isami am 25.Mär.09, 15:01:36
ihr könnts natürlich auch C# nehmen ;)

wenn schon C/C++ zu schwer is
Titel: Re: Hex-Viewer (?)
Beitrag von: Cherubim am 25.Mär.09, 15:06:46
Nicht zu schwer! Zu beschissen  ;D

Und komm mir jetzt nicht mit wie toll es doch ist alles selber kontrollieren zu können.
Leute die sowas sagen sollen doch ihr Auto selber bauen um damit zu fahren, dann wissen sie wie C programmieren ist :D