"We are back" « oc.at

C Hexdatei auslesen und dann die Hexwerte ausgeben...

NexusX 31.10.2003 - 11:42 6860 19
Posts

NexusX

Big d00d
Avatar
Registered: Aug 2002
Location: Austria
Posts: 217
folgendes: ich hab in einem char* der auf das gesamte hexdump zeigt


wie muss ich die typenumwandlung und die ausgabe machen damit ich die "echten" Hexwerte ohne ffffff davor bekommen ?? (und am besten in der richtigen Reihenfolge(littel/big endian))


bin für alle Vorschläge offen...

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4524
Eigentlich mit sscanf(), aber mir ist trotzdem nicht ganz klar wie dein hexdump source aussieht und was du haben moechtest (steht im pointer an der Speicherstelle wirklich die Hexwerte 0xff 0x3f usw. drinnen und wird mit 0x00 terminiert oder steht dort ein string der "0xff 0x3f" enthaelt? letzteres waere der hex_dump_; ersteres normaler binareres speicherbereich)

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
Zitat
C Hexdatei auslesen und dann die Hexwerte ausgeben...

bin nur ich verwirrt, oder müssen wir nicht zuerst eine terminologie finden?
also hexdump zb 5 bytes in hexdarstellung als string: char* mit "3f5b37004a" oder "3f 5b 37 00 4a" oder "0x3f 0x5b 0x37 0x00 0x4a"
und binärdaten sind dann die 5 bytes als daten.

du möchtest nun den string in hexdarstellung in binärdaten umwandeln ? wie sehen die daten aus? sie auch sscanf() und strtol()
oder möchtest du hex-daten lesen und dann als hex ausgeben ?
oder möchtest du binärdaten lesen und als hex ausgeben ?
Bearbeitet von atrox am 31.10.2003, 13:48

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Sehr richtig, so ist es eher unverständlich, was du willst. Das Problem mit den ffffff kommt jedenfalls daher, dass die signedness nicht stimmt.

NexusX

Big d00d
Avatar
Registered: Aug 2002
Location: Austria
Posts: 217
jaja ich weiß das ich es ein bißchen verwirrend hingeschriebne hab...

also hab ne datei mit hexzahelen in from:
Zitat von atrox
char* mit "3f5b37004a"

asci codiert fangt sie so an: Ôò¡  usw..

mit mman().. hol ich mir das ganze

und würde jez aber gerne nicht den asci wert sondern die echten hex zahlen di da drinnen stehen auch ausgeben in form: FF 06 45 A3

manalishi

tl;dr
Avatar
Registered: Feb 2001
Location: Feldkirch
Posts: 5977
tu' einfach das zeugs als zahl einlesen (byte für byte) und dann mit printf als hex ausgeben. ist es das was du willst??

manalishi

tl;dr
Avatar
Registered: Feb 2001
Location: Feldkirch
Posts: 5977
int tmp,n=0;

// file öffnen usw.

while(!feof(file))
{
tmp = (int) foo[n++];
printf("%x",tmp);
}



%x verwendest du für unsigned int, hexadezimal
wenn du auf den char-array aka string zugreifst, holst du ein einzelnes byte. das castest du als int und gibst zeichenweise aus, der offset des arrays muss natürlich auch mit jeder iteration wachsen.

NexusX

Big d00d
Avatar
Registered: Aug 2002
Location: Austria
Posts: 217
hmm ich beschreib das ganze näher in der hexdatei sind bestimmte hex kombinationen von interesse drinnen und manchne die ich net brauche ich will dann die zeiger auf die wichtigen infos in der 2.fachzyklischen liste speichern -->

Verfassen Sie ein Programm, das einen Packet-Dump liest und auswertet. Dessen Name wird als
Kommandozeilenparameter ¨ubergeben.
Ihr Programm kennt folgende Betriebsarten:
1. Lesen: pfind dateiname
Die Pakete werden aus der angegebenen Datei gelesen und in den Arbeitsspeicher geschrieben.
Die Verbindung der einzelnen Pakete wird durch eine doppelt verkettete Liste
typedef struct dliste { struct dliste *prev,*next; void *data; } *dliste;
hergestellt. Die Liste ist zyklisch geschlossen.
2. Ausgabe: pfind -c dateiname
Die Vermittlungsdaten der einzelnen Pakete werden in der Reihenfolge, in der sie abgespeichert
wurden, ausgegeben. Auf jeden Fall sind die Felder Timestamp, Source-IP und
-Port sowie Ziel-IP und -Port auszugeben. Wir ein zus¨atzlicher Switch -x ausgegeben, wird
zus¨atzlich ein Hexdump des Pakets ausgegeben.

NexusX

Big d00d
Avatar
Registered: Aug 2002
Location: Austria
Posts: 217
ich weiß nicht ob das jetzt dsa ganze einfacher macht aber im mom will ich nur mal das was ich eingelsen hab anschaun und prüfen ob die werte stimmen

btw wir sollten das ohne die zeichen einzeln einzulesen machen..

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
#define byte unsigned char

void hexdump(void *src, int len) {
while (len--) printf("%x ",*((byte*)src++));
}

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11346
Zitat von atrox
#define byte unsigned char

Pfui. ;)

typedef unsigned char byte;

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
hast recht :) kommt halt auf den compiler und plattform drauf an, ob man schon einen byte-typen hat, oder nicht.

NexusX

Big d00d
Avatar
Registered: Aug 2002
Location: Austria
Posts: 217
hmm ich tät dsa ja jetzt gerne auf meinem heimrechner testen aber leider fehlt mir dazu die mman.h und die paar verschiedenen versionen dich ich bis jez gefunden hab funktioniern net grrrrrrrrrrr

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
Zitat
mit mman().. hol ich mir das ganze
du meinst nicht zufällig mmap() ?

//edit: dein compiler bzw deine zielplattform müssen mmap() (mman.h) mitliefern und unterstützen - ansonsten ist es ziemlich hoffnungslos einfach von irgendwo eine mman.h herzunehmen, und zu hoffen, das es funktioniert.
Bearbeitet von atrox am 31.10.2003, 20:02

NexusX

Big d00d
Avatar
Registered: Aug 2002
Location: Austria
Posts: 217
hm mir wurde gesagt das es geht...

btw ja ich meinte mmap
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz