begin process at 2010 02 10 00:09:59
  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é :3 318 / 229

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 ID3 TAG COVER ALBUM IMAGE par nanonavich
FILEREADER par FrancoisGauthier
Source avec Zip CLASSE AVANCÉE DE LOG, THREAD SAFE ET DIVERSES SURCHARGES par sboli
Source avec Zip Source avec une capture Source .NET (Dotnet) INFILESEEKER par swonder
Source avec Zip Source avec une capture USB DETECTION par abandonware

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...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,702 sec (3)

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