begin process at 2012 02 09 20:37:44
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > DUMP DE FICHIERS [VC++ 6]

DUMP DE FICHIERS [VC++ 6]


 Information sur la source

Note :
Aucune note
Catégorie :Fichiers / Disque Niveau :Débutant Date de création :27/03/2003 Date de mise à jour :27/03/2003 09:26:13 Vu / téléchargé :4 068 / 242

Auteur : nikko

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

  Il s'agit de lire un fichier en mode binaire (sans interprétation de son contenu) et d'afficher le tout en hexa, décimal ou binaire et avec un regroupement de 1 à 4 octets. L'affichage se fait sur une console avec de la couleur et l'utilisation de séquences d'échappement.

  Si y a un affichage pourri, place dans config.sys la ligne suivante:
  ( Vérifie le chemin )

       DEVICE=C:\WINDOWS\COMMAND\ANSI.SYS

Source

  • /*-------------------------------------------------------------
  • * Fichier : dump.c ( EXTRAIT cf ZIP )
  • * N.P. : 19/11/2001 09:24
  • * Objet : Lecture en mode binaire
  • * ===================================
  • */
  • #include <limits.h>
  • #include <string.h>
  • #include <ctype.h>
  • #include <stdio.h>
  • #define DECAL_ORG 45 //départ colonne ASCII
  • #define color printf("\033[36m") //couleur bleu pour ASCII
  • #define norm printf("\033[37m") //couleur normale (blanc)
  • #define color_2 printf("\033[33m") //couleur jaune pour l'Offset
  • //Prototype(s):
  • void curseur ( int decalage , char valeur );
  • void binaire_char ( unsigned char nbre );
  • void binaire_int ( unsigned int nbre );
  • /*------------------------------------------------------------*/
  • int main( int argc , char *argv[] )
  • {
  • int base = 16;
  • int group = 1; //1 pour char, 4 pour int...
  • int i;
  • //Vérif. des arguments:
  • if (argc == 1)
  • {
  • printf("\nConception: Nicolas PIRAT (R)\n");
  • printf("\nUtilite: afficher en dec/bin/hex un fichier par 1 ou 4 octet(s).\n");
  • printf("\nAppel: DUMP.EXE nom_fichier [/dec] [/bin] [/int] \n");
  • printf(" Par defaut, affichage en hexa et par octet.\n");
  • printf("\nIt's ok ? ");
  • getchar();
  • return 1;
  • }
  • for (i=2; i < argc; i++)
  • {
  • if ( !strcmp( argv[i], "/dec") )
  • base = 10;
  • if ( !strcmp( argv[i], "/int" ) )
  • group = 4;
  • if ( !strcmp( argv[i], "/bin" ) )
  • base = 2;
  • }
  • //Ouverture du fichier:
  • {
  • FILE *f;
  • unsigned char buffer;
  • unsigned int buffer_int;
  • int i,ligne = 0;
  • int decal = DECAL_ORG;
  • if ((f = fopen(argv[1],"rb")) == NULL)
  • {
  • perror("Le fichier ne s'est pas ouvert.");
  • return 1;
  • }
  • else
  • {
  • //Lecture du fichier:
  • do
  • {
  • color_2;
  • printf("%06ld ", ftell( f ) );
  • norm;
  • //Modif. pour affichage des int:
  • if ( (group == 4) && (base == 16) )
  • base = 6;
  • if ( (group == 4) && (base == 10) )
  • base = 4;
  • if ( (group == 1) && (base == 10) )
  • base = 12;
  • if ( (group == 1) && (base == 2) )
  • base = 5;
  • for( i=0 ; i <base ; i++)
  • {
  • //Choix de la taille des données à lire d'un coup:
  • if ( group == 1 )
  • fread( &buffer , sizeof(char) , 1 , f );
  • else
  • fread( &buffer_int, sizeof(int), 1 , f );
  • if ( feof(f) ) //Fin de fichier !
  • {
  • fclose( f );
  • return 0;
  • }
  • //Choix de l'affichage d'apeès la base:
  • if ((base == 16) || (base == 6))
  • {
  • if ( group == 1)
  • printf("%02X ",buffer );
  • else
  • printf("%08X ", buffer_int );
  • }
  • else if (( base == 12) || (base == 4) ) //base 10
  • {
  • if ( group == 1)
  • printf("%03d ",buffer );
  • else
  • printf("%010d ", buffer_int );
  • }
  • else
  • {
  • if ( group == 1)
  • binaire_char( buffer );
  • else
  • binaire_int( buffer_int );
  • }
  • //else ( base == 2 )
  • //Ecrit à droite de l'écran et revient à gauche si CHAR !
  • if (group == 1)
  • curseur(decal,buffer);
  • //Prépa pour prochain décalage:
  • if ( (base == 12) || (base == 4) ) //Correspond à la base 10
  • {
  • if (group == 1)
  • decal -= 3;
  • else
  • decal -= 10;
  • }
  • else if ( (base == 16) || (base == 6)) //base 16
  • {
  • if (group == 1)
  • decal -= 2;
  • else
  • decal -= 8;
  • }
  • else
  • {
  • if (group == 1)
  • decal -= 5;
  • else
  • decal -= 2;
  • }
  • }
  • //Position en bout de ligne pour faire \n:
  • //printf("\0338");
  • printf("\n");
  • decal = DECAL_ORG;
  • ligne++;
  • //Affichage page par page...!
  • if (ligne > 23)
  • {
  • printf("Appuyer sur une touche pour continuer...");
  • ligne = 0;
  • i = getchar();
  • }
  • } while (!feof(f));
  • }
  • fclose( f );
  • }
  • return 0;
  • }
/*-------------------------------------------------------------
* Fichier : dump.c    ( EXTRAIT cf ZIP )
* N.P.    : 19/11/2001 09:24
* Objet   : Lecture en mode binaire
* ===================================
*/

#include <limits.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>

#define DECAL_ORG 45								//départ colonne ASCII

#define color printf("\033[36m")					//couleur bleu pour ASCII
#define norm printf("\033[37m")					//couleur normale (blanc)
#define color_2 printf("\033[33m")				//couleur jaune pour l'Offset


//Prototype(s):
void curseur ( int decalage , char valeur );
void binaire_char ( unsigned char nbre );
void binaire_int ( unsigned int nbre );




/*------------------------------------------------------------*/
int main( int argc , char *argv[] )
{
	int base = 16;
	int group = 1;		//1 pour char, 4 pour int...
	int i;
	
	//Vérif. des arguments:
	if (argc == 1)
	{
		printf("\nConception: Nicolas PIRAT (R)\n");
		printf("\nUtilite: afficher en dec/bin/hex un fichier par 1 ou 4 octet(s).\n");
		printf("\nAppel: DUMP.EXE nom_fichier [/dec] [/bin] [/int] \n");
		printf("       Par defaut, affichage en hexa et par octet.\n");
		printf("\nIt's ok ? ");
		getchar();
		return 1;
	}
	
	for (i=2; i < argc; i++)
	{
		if ( !strcmp( argv[i], "/dec") )
			base = 10;
		
		if ( !strcmp( argv[i], "/int" ) )
			group = 4;
		if ( !strcmp( argv[i], "/bin" ) )
			base = 2;
	}
	
	//Ouverture du fichier:
	{
		FILE *f;
		unsigned char buffer;
		unsigned int buffer_int;
		int i,ligne = 0;
		int decal = DECAL_ORG;
		
		if ((f = fopen(argv[1],"rb")) == NULL)
		{
			perror("Le fichier ne s'est pas ouvert.");
			return 1;
		}
		else
		{
			//Lecture du fichier:
			do
			{
				color_2;
				printf("%06ld ", ftell( f ) );
				norm;

				//Modif. pour affichage des int:
				if ( (group == 4) && (base == 16) )
					base = 6;
				if ( (group == 4) && (base == 10) )
					base = 4;
				if ( (group == 1) && (base == 10) )
					base = 12;
				if ( (group == 1) && (base == 2) )
					base = 5;

				for( i=0 ; i <base ; i++)
				{
					//Choix de la taille des données à lire d'un coup:
					if ( group == 1 )
						fread( &buffer , sizeof(char) , 1 , f );
					else
						fread( &buffer_int, sizeof(int), 1 , f );
					
					if ( feof(f) )	//Fin de fichier !
					{
						fclose( f );
						return 0;
					}

					//Choix de l'affichage d'apeès la base:
					if ((base == 16) || (base == 6))
					{
						if ( group == 1)
							printf("%02X ",buffer );
						else
							printf("%08X ", buffer_int );
					}
					else if (( base == 12) || (base == 4) )	//base 10
					{
						if ( group == 1)
							printf("%03d ",buffer );
						else
							printf("%010d ", buffer_int );
					}
					else
					{
						if ( group == 1)
							binaire_char( buffer );
						else
							binaire_int( buffer_int );
					}
					//else ( base == 2 )
					
					
					//Ecrit à droite de l'écran et revient à gauche si CHAR !
					if (group == 1)
						curseur(decal,buffer);

					//Prépa pour prochain décalage:
					if ( (base == 12) || (base == 4) )		//Correspond à la base 10
					{
						if (group == 1)
							decal -= 3;
						else
							decal -= 10;
					}
					else if ( (base == 16) || (base == 6))			//base 16
					{
						if (group == 1)
							decal -= 2;
						else
							decal -= 8;
					}
					else
					{
						if (group == 1)
							decal -= 5;
						else
							decal -= 2;
					}
					
				}
				//Position en bout de ligne pour faire \n:
				//printf("\0338");
				printf("\n");
				decal = DECAL_ORG;
				ligne++;
				//Affichage page par page...!
				if (ligne > 23)
				{
					printf("Appuyer sur une touche pour continuer...");
					ligne = 0;
					i = getchar();
				}	
			} while (!feof(f));
			
		}
		fclose( f );
	}	
	
	return 0;	
}

 Conclusion

J'ai tenté un dump de la mémoire en partant de l'adresse  de la fonction main(). C'est intérresant mais il-y-a-til une solution (sans taper bcp d'asm) pour sortir du cadre de la mémoire allouée à mon processus...?

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip NIBLE LE JEU DU SERPENT [VC++ 6]
Source avec Zip UTILISATION D'UN ARBRE BINAIRE ET DES CLASSES EN C++ (ALGORI...

 Sources de la même categorie

Source avec Zip Source avec une capture GENERE BMP par lajouad
Source avec Zip Source avec une capture GETIONNAIRE D'UNE BIBLIOTHÉQUE EN C par benzarabel
FONCTION D'ÉDITION DE FICHIER BIT À BIT [C-MULTIPLATEFORME] par lynxtyle
Source avec Zip Source avec une capture UN GESTIONNAIRE DU FICHIER par benzarabel
Source avec Zip COPIE DE FICHIERS PAR RESEAU LOCAL par cczerty

Commentaires et avis

Commentaire de DarkBoss le 20/04/2005 16:09:41

pourquoi ne pas utiliser textcolor(int); ?

Commentaire de DarkBoss le 20/04/2005 16:18:43

ce n' est pas un dump un dump ne lis pas le fichier il lis la memoire et la sauvegarde dans un fichier

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,343 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales