Dump

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 735 fois - Téléchargée 30 fois

Contenu du snippet

Ce code enregistre dans /home/debug.txt un dump du fichier entré en argument à l'éxécution du programme.
c'est plus ou moins inutile,mais il y a un début à tout!

Source / Exemple :


#include <stdio.h>

/* pour compiler avec gcc: gcc dump.txt -o dump */

/////////////////////////////////////////////////
// dump de fichier pour linux                  //
//                                             //
// commande:nom_executable nom_fichier d_entree//
/////////////////////////////////////////////////

int main(int argc,char* argv[])
{
  int a=-16,i,b[16],c;
  unsigned size=0;
  FILE *fp,*fo;
  fo=fopen("/home/debug.txt","w");   //ouverture du fichier pour enregistrer le dump
  if ((fp=fopen(argv[argc-1],"r"))==NULL)
    {
      printf("Echec lors de l'ouverture du fichier \"%s\".\n",argv[argc-1]);
      exit(1);
    }
  printf("Ouverture du fichier \"%s\" réussie.\n",argv[argc-1]);
  fprintf(fo,"Ouverture du fichier \"%s\" réussie.\n",argv[argc-1]);
  fprintf(fo,"\n---------------- Debug : ----------------\n\n");
  puts("En cours ...");
 
  do
    {
      fprintf(fo,"%08X\t",a+=16);
      i=0;
      while (i<16 && c!=EOF)
	{
	  size++; //incrementation de la variable contenant la taille du fichier
	  c=fgetc(fp);   //octet suivant du fichier
	  if (i==8) fprintf(fo," -  ");
	  fprintf(fo,"%02X ",b[i]=c);
	  i++;
	}
      fprintf(fo,"\t");
      for(i=0;i<16;i++)
	{
	  if (isprint(b[i]))
	    fprintf(fo,"%c",b[i]);
	  else
	    fprintf(fo," ");
	}
      fprintf(fo,"\n");;
    }while (c!=EOF);

  fprintf(fo,"\nFin du fichier\nTaille du fichier:%d octets soit %f Ko.",size,(float) size/1024);
  puts("Debug enregistré dans le fichier /home/debug.txt");
  fclose(fp);
  fclose(fo);
  return 0;
}

A voir également

Ajouter un commentaire Commentaires
Messages postés
118
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
2 novembre 2007

Euh pour dumper des fichier binaire c'est pas top...
vaudrait mieu remplacer "r" par "rb" sa sra tout de suite déjà mieu.
De plus le size en long serait une bonne chose aussi.
Un contrôle des arguments ne serait pas inutile, un simple
if(argc < 2)return 1;
suffirait.
Pour une meilleur lisibilité du code utiliser une variable szFileName serait bien mieu que argv[argc-1].
A et puis mettre dans le home c'est franchement pas terrible. Dejà c'est pas portable et un petit "./" suffirait ou encore :
strcpy(l_szLog, l_szInput);
char *buffer = l_szLog;
while(*buffer){
if(*buffer '.')*buffer 0;
buffer++;
}
strcat(l_szLog, "_dump.txt");

Voila c'est tout sinon ton code est intéressant =)
Messages postés
36
Date d'inscription
dimanche 11 décembre 2005
Statut
Membre
Dernière intervention
17 février 2006

non,pour l'adapter a windows il suffit de remplacer à la ligne 16 "/home/debug.txt" par "C:\\debug.txt" et de compiler. ton dump sera danc C:\debug.txt. n'oublie pas de mettre un argument à l'execution,ou si tu ne peux pas, a la ligne 17 tu remplace (fp=fopen(argv[argc-1],"r") par (fp=fopen("chemin_complet_du_fichier","r"). voila ;)
Messages postés
19
Date d'inscription
mardi 11 mars 2003
Statut
Membre
Dernière intervention
21 mai 2010

ton code m'intéresse mais tu penses que ca serai dur de l'adapter a windows?
Messages postés
1491
Date d'inscription
dimanche 19 novembre 2000
Statut
Modérateur
Dernière intervention
7 juillet 2014

Merci :)
Messages postés
36
Date d'inscription
dimanche 11 décembre 2005
Statut
Membre
Dernière intervention
17 février 2006

ouais je sais,jme suis planté.je vais rectifier ca.
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.