ISO C (C99): File HexViewer

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: ISO C (C99): File HexViewer

Δημοσίευσηαπό Star_Light » 02 Μαρ 2012, 15:57

@migf1 δεν το καταλαβες.... τα ιδια γραφουμε για το 16-δικο απλα δεν εχω βαλει αντιστοιχια με τις δεκαδικες του values....
πχ το 32 στο δεκαδικο αν συνεχισουμε απο εκει που εμεινες ειναι το 30 στο 16-δικο :)

Τα 2 pdf έχουν ιδιο αριθμο απο bytes οπως λες επειδη ειναι ιδιας major εκδοσης ετσι? 1.2.... 1.3 etc..

Ο δικος σου ειναι hex editor ή μονο viewer?
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: ISO C (C99): File HexViewer

Δημοσίευσηαπό migf1 » 02 Μαρ 2012, 16:17

Α, ok :)

ΥΓ. Μόνο viewer (προς το παρόν :lol:)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ISO C (C99): File HexViewer

Δημοσίευσηαπό Star_Light » 02 Μαρ 2012, 16:20

migf1 έγραψε:Α, ok :)

ΥΓ. Μόνο viewer (προς το παρόν :lol:)


Θα πρεπει να ειναι υπερτατο το hex editing :P
θελει αλλες 1000 γραμμες κωδικα ή με μια συναρτηση ξεμπερδεύεις? :lol: :lol:
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: ISO C (C99): File HexViewer

Δημοσίευσηαπό migf1 » 02 Μαρ 2012, 16:34

Κάτι ανάμεσα ;)

Αλλά θα είναι δύσχρηστο το editing επειδή λόγω του ότι (συνειδητά) χρησιμοποιώ στάνταρ C99 δεν γίνεται να δουλεύεις απευθείας πάνω στην οθόνη. Θα πρέπει ότι κάνεις να το κάνεις στην εσωτερική γραμμή εντολών... πχ με μια εντολή ας πούμε e και να γράφεις δίπλα τις τιμές που θέλεις να κάνουν overwrite στα bytes από τον τρέχοντα δρομέα και μετά (ή να προστεθούν αν βάλω και υποστήριξη για Insert Mode). Αλλιώς θα πρέπει να χρησιμοποιήσω βιβλιοθήκες, όπως η ncurses που είπε ο Σίμος μερικά ποστς πιο πριν (ή να τον κάνω φουλ GUI, π.χ. με GTK+).

Δεν ξέρω όμως αν αξίζει τον κόπο, μιας και υπάρχουν ήδη πολλοί και καλοί hex-editors, με ή χωρίς GUI: http://www.linuxlinks.com/Software/Editors/Hex/ (δες π.χ τον Bless ή τον dhex). Για Windows υπάρχουν άπειροι, μερικοί μόνο καφέ δεν ψήνουν!

Btw, αυτό που δείχνει ακολουθίες bytes εκφρασμένες σε διάφορες αριθμητικές βάσεις ή και τύπους δεδομένων θα το προσθέσω κι εγώ στο HexView (ήδη το κάνει για 1 byte, στις μωβ ενδείξεις).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ISO C (C99): File HexViewer

Δημοσίευσηαπό migf1 » 08 Μαρ 2012, 19:39

Δεν είμαι έτοιμος ακόμα να δώσω κώδικα (εκτός αν δεν σας ενοχλεί να είναι γεμάτος πειραματισμούς) αλλά έχω προσθέσει μερικά πραγματάκια ακόμα.

Το βασικότερο είναι πως έχω κάνει τον viewer να μπορεί να αλλάζει χρωματικές προσόψεις (color skins) και πως έχω απομονώσει τα printable texts σε ξεχωριστό header-file (για να μου είναι εύκολο να το μεταφράσω όταν χρειαστεί σε άλλη γλώσσα, χωρίς να μπλέκω με gettext() ). Επίσης του έχω προσθέσει την λειτουργία ! (not) στην αναζήτηση των hex byte-sequence.

Π.χ. με την εντολή...
Κώδικας: Επιλογή όλων
;00
ψάχνει το επόμενο μηδενικό byte,

αλλά με την ...
Κώδικας: Επιλογή όλων
;!00
ψάχνει το επόμενο μη μηδενικό byte.

Άλλο παράδειγμα, με την εντολή...
Κώδικας: Επιλογή όλων
;!FFFF
προσπερνάει την ακολουθία FF FF (2 bytes), από τη θέση του δρομέα και μετά

ενώ με την εντολή...
Κώδικας: Επιλογή όλων
:A1C0E9
ψάχνει την ακολουθία A1 C0 E9 (3 bytes) από τη θέση του δρομέα και πριν.

Τα ; και : είναι οι εντολές αναζήτησης ακολουθιών bytes από τον δρομέα και μετά/πριν.

Παρακάτω παραθέτω screenshots από τα 4 skins που έχω φτιάξει μέχρι στιγμής, όπως φαίνονται στην κονσόλα των Windows με μαύρο φόντο (πάνω εικόνες) και στο Cygwin με άσπρο φόντο (κάτω εικόνες). Το Cygwin προσομοιώνει Linux στην κονσόλα των Windows, και όπως φαίνεται από τις εικόνες μεταφράζονται σε ελαφρώς διαφορετικά χρώματα τα ANSI escape sequences.

SKIN SCREEN-SHOTS (ανοίξτε το spoiler)...

Spoiler: show
BLACK SKIN:
Εικόνα

BLUE SKIN:
Εικόνα

RED SKIN:
Εικόνα

GRAY SKIN:
Εικόνα

ΥΓ. Αν δεν σας πειράζει που πολλά κομμάτια του κώδικα είναι ακόμα σε κατάσταση "first-draft" και θέλετε να τον χαζέψετε, πείτε μου να τον ποστάρω.
Τελευταία επεξεργασία από migf1 και 08 Μαρ 2012, 20:18, έχει επεξεργασθεί 2 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ISO C (C99): File HexViewer

Δημοσίευσηαπό migf1 » 08 Μαρ 2012, 19:45

Στο απόσπασμα του κώδικα που ακολουθεί, μπορείτε να δείτε πως είναι η συνάρτηση που ορίζει το μαύρο skin, καθώς επίσης και την δομή που μοιράζονται όλα τα skins...

Skin type:

Μορφοποιημένος Κώδικας: Επιλογή όλων
/* -----------------------------------
* Color related Custom Types
* -----------------------------------
*/

#define VALID_SKINID(id) ( (id) > SKINID_ERROR && (id) < MAXSKINS )
enum SkinId {
SKINID_ERROR = -1,
SKINID_NOCOLOR = 0,
SKINID_BLACK,
SKINID_GRAY,
SKINID_RED,
SKINID_BLUE,
MAXSKINS
};


typedef struct SkinItemColors {
#if defined( CON_COLOR_WIN32 ) /* Windows COLORS are unisgned int === */
unsigned int fg;
unsigned int bg;

#elif defined( CON_COLOR_ANSI ) /* ANSI COLORS are c-strings ========= */
char fg[ CONOUT_CLRSZ ];
char bg[ CONOUT_CLRSZ ];

#endif
} SkinItemColors;


typedef struct Skin {
enum SkinId id; /* skin id */

SkinItemColors normal; /* normal item colors (fg & bg) */
SkinItemColors bold; /* bold item colors (fg & bg) */

SkinItemColors progname; /* program-name colors (fg & bg) */

SkinItemColors msg; /* plain message colors (fg & bg) */
SkinItemColors warnmsg; /* warning-message colors (fg & bg) */
SkinItemColors errmsg; /* error-message colors (fg & bg) */

SkinItemColors rowofst; /* row-offset colors (fg & bg) */
SkinItemColors bytcurr; /* current byte colors (fg & bg) */
SkinItemColors bytprt1; /* printable byte colors (fg & bg) */
SkinItemColors bytprt0; /* non-printable byte colors (fg & bg) */
SkinItemColors bytzero; /* zeroed byte colors (fg & bg) */

SkinItemColors inffname; /* current filename info-colors (fg&bg)*/
SkinItemColors infpg; /* current page pos info-colors (fg&bg)*/
SkinItemColors infchrset; /* current charset info-colors (fg&bg)*/
SkinItemColors infbytpos; /* current byte pos info-colors (fg&bg)*/
SkinItemColors infrowpos; /* current row pos info-colors (fg&bg)*/
SkinItemColors infdec8; /* curr byte 8bit-decimal-val info-clrs*/
SkinItemColors infoct8; /* curr byte 8bit-octal-val info-colors*/
SkinItemColors infbin8; /* curr byte 8bit-binary-val info-colrs*/

SkinItemColors infsepar1; /* separator#1 info-colors (fg&bg)*/
SkinItemColors infsepar2; /* separator#2 info-colors (fg&bg)*/
SkinItemColors infsepar3; /* separator#3 info-colors (fg&bg)*/
SkinItemColors infsepar4; /* separator#4 info-colors (fg&bg)*/

SkinItemColors prompt; /* prompt main colors (fg & bg)*/
SkinItemColors pmtprevcmd; /* prompt prev-command colors (fg & bg)*/
} Skin;


Η συνάρτηση που δημιουργεί το μαύρο skin:

Μορφοποιημένος Κώδικας: Επιλογή όλων
/*********************************************************//**
*
*************************************************************
*/
bool skin_set_black( Skin *skin )
{
if ( !skin )
return false;

skin->id = SKINID_BLACK;

/* normal item */
CONOUT_CPYCLR( skin->normal.fg, FG_GRAY );
CONOUT_CPYCLR( skin->normal.bg, BG_BLACK );

/* emphasized-item (mostly used in the Help screen) */
CONOUT_CPYCLR( skin->bold.fg, FG_WHITE );
CONOUT_CPYCLR( skin->bold.bg, BG_BLACK );

/* messages */
CONOUT_CPYCLR( skin->msg.fg, FG_GREEN ); /* plain */
CONOUT_CPYCLR( skin->msg.bg, skin->normal.bg);
CONOUT_CPYCLR( skin->warnmsg.fg, FG_YELLOW ); /* warnings */
CONOUT_CPYCLR( skin->warnmsg.bg, skin->normal.bg);
CONOUT_CPYCLR( skin->errmsg.fg, FG_RED ); /* errors */
CONOUT_CPYCLR( skin->errmsg.bg, skin->normal.bg);

/* table headings (col-indices & row-offsets) */
CONOUT_CPYCLR( skin->rowofst.fg, FG_CYAN );
CONOUT_CPYCLR( skin->rowofst.bg, skin->normal.bg);

/* table data (hex & ascii panes) */
CONOUT_CPYCLR( skin->bytcurr.fg, FG_MAGENTA ); /* curr byte */
CONOUT_CPYCLR( skin->bytcurr.bg, skin->normal.bg);
CONOUT_CPYCLR( skin->bytprt1.fg, skin->normal.fg ); /* printable */
CONOUT_CPYCLR( skin->bytprt1.bg, skin->normal.bg);
CONOUT_CPYCLR( skin->bytprt0.fg, FG_DARKYELLOW ); /* no-printable*/
CONOUT_CPYCLR( skin->bytprt0.bg, skin->normal.bg);
CONOUT_CPYCLR( skin->bytzero.fg, FG_DARKGRAY ); /* zeroed byte */
CONOUT_CPYCLR( skin->bytzero.bg, skin->normal.bg);

/* 1st info-line */
CONOUT_CPYCLR( skin->inffname.fg, FG_WHITE ); /* fname & sz*/
CONOUT_CPYCLR( skin->inffname.bg, BG_DARKBLUE);
CONOUT_CPYCLR( skin->infpg.fg, FG_CYAN ); /* page pos */
CONOUT_CPYCLR( skin->infpg.bg, BG_DARKBLUE );
CONOUT_CPYCLR( skin->infchrset.fg, FG_WHITE ); /* char-set */
CONOUT_CPYCLR( skin->infchrset.bg, BG_DARKBLUE );
CONOUT_CPYCLR( skin->progname.fg, FG_WHITE ); /* prog name */
CONOUT_CPYCLR( skin->progname.bg, BG_DARKBLUE);

/* 2nd info-line (includes the prompt) */
CONOUT_CPYCLR( skin->infbytpos.fg, FG_WHITE ); /* byte pos */
CONOUT_CPYCLR( skin->infbytpos.bg, BG_DARKMAGENTA );
CONOUT_CPYCLR( skin->infrowpos.fg, FG_GRAY ); /* row pos */
CONOUT_CPYCLR( skin->infrowpos.bg, BG_DARKMAGENTA );
CONOUT_CPYCLR( skin->infdec8.fg, FG_WHITE ); /* 8bits dec */
CONOUT_CPYCLR( skin->infdec8.bg, BG_DARKMAGENTA );
CONOUT_CPYCLR( skin->infoct8.fg, FG_WHITE ); /* 8bits oct */
CONOUT_CPYCLR( skin->infoct8.bg, BG_DARKMAGENTA );
CONOUT_CPYCLR( skin->infbin8.fg, FG_WHITE ); /* 8bits bin */
CONOUT_CPYCLR( skin->infbin8.bg, BG_DARKMAGENTA );

/* prompt (included in 2nd info-line) */
CONOUT_CPYCLR( skin->pmtprevcmd.fg, FG_WHITE ); /* prev cmd */
CONOUT_CPYCLR( skin->pmtprevcmd.bg, skin->normal.bg);
CONOUT_CPYCLR( skin->prompt.fg, skin->normal.fg ); /* prompt */
CONOUT_CPYCLR( skin->prompt.bg, skin->normal.bg);

/* separator groups (for up to 2 info-lines) */
CONOUT_CPYCLR( skin->infsepar1.fg, skin->normal.fg ); /* line#1 grp-1*/
CONOUT_CPYCLR( skin->infsepar1.bg, BG_DARKBLUE );
CONOUT_CPYCLR( skin->infsepar2.fg, FG_DARKBLUE ); /* line#1 grp-2*/
CONOUT_CPYCLR( skin->infsepar2.bg, BG_DARKBLUE );
CONOUT_CPYCLR( skin->infsepar3.fg, FG_DARKGRAY ); /* line#2 grp-1*/
CONOUT_CPYCLR( skin->infsepar3.bg, BG_DARKMAGENTA );
CONOUT_CPYCLR( skin->infsepar4.fg, skin->normal.fg ); /* line#2 grp-2*/
CONOUT_CPYCLR( skin->infsepar4.bg, skin->normal.bg );

return true;
}
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ISO C (C99): File HexViewer

Δημοσίευσηαπό migf1 » 31 Μαρ 2012, 01:59

Καλώς εχόντων των πραγμάτων, εντός του Σ/Κ θα έχω ολοκληρώσει την παρακάτω λίστα από features και θα ποστάρω εδώ και τον κώδικα για εξαντλητικό beta-testing από όποιον επιθυμεί...

Μορφοποιημένος Κώδικας: Επιλογή όλων
Console HexViewer
=================

Brief:

Console hex-viewer, written in standard C99 (compiles & runs on any platform).

Features:

- unlimited filesizes (optionally, by default it uses a 2Gb limit, for faster loading times)
- multilingual (currently in English & Greek)
- syntax highlighting (printable, non-printable & zeroed bytes)
- color themes (currently: black, blue, red, gray)
- 8-bit ASCII support (adopts to any ASCII compatible encoding, including ANSI and UTF-8)
- byte groups (view contents grouped by 4, 8 or 16 bytes)
- sizes (base2/8/10/16 display, in both endians, for any 8/16/32/64bit area)
- bookmarks (up to 16 bookmarks, used either by label or by id)
- moving (absolute & relative moving to any byte/row/page)
- jumping (direct jump to start & end of current file/page/row)
- normal search (bi-directional search for either hex or ascii strings)
- negated search (bi-directional skipping of consecutive. same bytes or byte sequences)
- endianess conversion (conversion & saving of selected contents, as binary or as hexdumps)
- shell access (access to system's shell/command-line)
- repeat last command (by hitting the ENTER key... a simple but rather useful gimmick)
- pageable help

Και μερικά νέα screen-shots...

Main Screen

Εικόνα

Bookmarks

Εικόνα

Sizes

Εικόνα

Αναζήτηση

Εικόνα
Τελευταία επεξεργασία από migf1 και 31 Μαρ 2012, 02:54, έχει επεξεργασθεί 1 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ISO C (C99): File HexViewer

Δημοσίευσηαπό migf1 » 31 Μαρ 2012, 02:51

Μερικά ακόμα screen-shots, από άλλες λειτουργίες...

Πρόσβαση στον φλοιό/γραμμή εντολών


Εικόνα

Δυνατότητα Περιήγησης στις Οθόνες Βοηθείας



16-αδική Εξαγωγή Επιλογής με Αντεστραμμένη Απεικόνιση Bytes (Endianess)

Εικόνα

Εικόνα
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ISO C (C99): File HexViewer

Δημοσίευσηαπό migf1 » 17 Απρ 2012, 12:01

Νέα έκδοση (και τελευταία, τουλάχιστιον προς το παρόν και το εγγύς μέλλον) στο 1ο ποστ του παρόντος νήματος. Λίαν λειτουργική ;)

Bug reports (πέρα από αυτά που αναφέρονται στην τεκμηρίωση) ευπρόσδεκτα.

Ο κώδικας σε πολλά σημεία είναι σε κατάσταση "1st draft".
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: ISO C (C99): File HexViewer

Δημοσίευσηαπό simosx » 17 Απρ 2012, 12:32

migf1 έγραψε:Νέα έκδοση (και τελευταία, τουλάχιστιον προς το παρόν και το εγγύς μέλλον) στο 1ο ποστ του παρόντος νήματος. Λίαν λειτουργική ;)

Bug reports (πέρα από αυτά που αναφέρονται στην τεκμηρίωση) ευπρόσδεκτα.

Ο κώδικας σε πολλά σημεία είναι σε κατάσταση "1st draft".


Για να προστεθεί στο Github στην ενότητα του ubuntu-gr, τότε πρέπει να καθορίσεις μια υπάρχουσα άδεια, όπου να επιτρέπει και εμπορική χρήση (απαιτεί διανομή του πηγαίου κώδικα για όσους αναδιανείμουν).
Διαφορετικά,
1. μπορώ να πάρω των κώδικα και να τον μετατρέψω σε ένα τοπικό αποθετήριο git
2. να φτιάξεις προσωπικό λογαριασμό στο github
3. και να δημοσιοποιήσεις τον κώδικα στο github, σε προσωπικό σου αποθετήριο. Θα είσαι σε θέση να διατηρήσεις την άδεια που θέλεις (π.χ. να απαιτείς μόνο μη-εμπορική διανομή).
προσωπικό ιστολόγιο ϗ πλανήτης Ubuntu-gr
Συμβάλετε και εσείς στο ελληνικό βιβλίο Ubuntu!
1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 13.10 saucy 3.11.0-031100rc1-generic 64bit (el_GR.UTF-8, Unity ubuntu)
3 AMD E-450 APU with Radeon HD Graphics ‖ RAM 3555 MiB ‖ Sony Corporation VAIO
4 AMD nee ATI Wrestler [Radeon HD 6320] [1002:9806] {fglrx_pci}
5 eth0: Atheros Inc. AR8151 v2.0 Gigabit Ethernet [1969:1083] (rev c0) ⋮ wlan0: Atheros Inc. AR9285 [168c:002b] (rev 01)
Φτιάξτε και εσείς τη δική σας υπογραφή (παραπάνω κείμενο) αυτόματα με κλικ εδώ!
simosx
Επίτιμο μέλος
Επίτιμο μέλος
 
Δημοσιεύσεις: 10334
Εγγραφή: 11 Μάιος 2008, 18:52
Launchpad: simosx
IRC: simosx
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι

cron