Je cherche un outil (ou les paramètres appropriés à passer à un outil
standard) qui puisse me donner la position de toutes les occurrences
d'une chaîne dans un fichier (le fichier fait 50 Go en fait un "dump"
d'un disque crashé obtenu avec dd).
J'ai essayé "grep -b" mais il n'aime pas trop les parties binaires. Mon
autre option est de passer par "hexdump -C" d'abord, mais comme là ma
chaîne risque d'être à cheval sur deux lignes...
Une idée ?
Merci,
Patrick
--
Patrick Stadelmann <Patrick.Stadelmann@unine.ch>
Je cherche un outil (ou les paramètres appropriés à passer à un outil standard) qui puisse me donner la position de toutes les occurrences d'une chaîne dans un fichier (le fichier fait 50 Go en fait un "dump" d'un disque crashé obtenu avec dd).
JPaul. -- /==/==- Jean-Paul BLANC / /--/--// quelque-part (somewhere) |/| L | en (in) /|| = ||| FRANCE
Patrick Stadelmann <Patrick.Stadelmann@unine.ch> wrote:
Je cherche un outil (ou les paramètres appropriés à passer à un outil
standard) qui puisse me donner la position de toutes les occurrences
d'une chaîne dans un fichier (le fichier fait 50 Go en fait un "dump"
d'un disque crashé obtenu avec dd).
Je cherche un outil (ou les paramètres appropriés à passer à un outil standard) qui puisse me donner la position de toutes les occurrences d'une chaîne dans un fichier (le fichier fait 50 Go en fait un "dump" d'un disque crashé obtenu avec dd).
JPaul. -- /==/==- Jean-Paul BLANC / /--/--// quelque-part (somewhere) |/| L | en (in) /|| = ||| FRANCE
junk
Patrick Stadelmann wrote:
Je cherche un outil (ou les paramètres appropriés à passer à un outil standard) qui puisse me donner la position de toutes les occurrences d'une chaîne dans un fichier (le fichier fait 50 Go en fait un "dump" d'un disque crashé obtenu avec dd).
Voici un programme très rapide, adapté d'un exercice fait à l'école d'ingénieurs.
Je poste le programme sans plus d'explications pour ne pas gâcher le plaisir des futurs étudiants. Si quelqu'un est intéressé par le code commenté en détail, je peux le lui envoyer par email.
Version compilée : http://seriot.ch/temp/docs/binaryFind.zip
-- makefile
binaryFind: binaryFind.c cc -O4 binaryFind.c -o binaryFind
-- binaryFind.c
/* DL/NS, 200402/200507 * * Compte les occurrences d'une chaîne dans un flots d'octets, * affiche les positions des occurrences, algorithme en O(n). */
int initVectors(int *vector, const char *pattern) { int i; int patternLength = strlen(pattern);
for (i=0; i<128; i++) { vector[i] = 0; }
for (i=0; i<patternLength; i++) { vector[pattern[i]] |= 1<<i; }
return 0; }
int byg(const char *pattern, FILE *file) { char currentChar; int foundCount = 0; int result = 0; int adr = -strlen(pattern); int mask = 1 << (strlen(pattern)-1); int vector[128];
Patrick Stadelmann <Patrick.Stadelmann@unine.ch> wrote:
Je cherche un outil (ou les paramètres appropriés à passer à un outil
standard) qui puisse me donner la position de toutes les occurrences
d'une chaîne dans un fichier (le fichier fait 50 Go en fait un "dump"
d'un disque crashé obtenu avec dd).
Voici un programme très rapide, adapté d'un exercice fait à l'école
d'ingénieurs.
Je poste le programme sans plus d'explications pour ne pas gâcher le
plaisir des futurs étudiants. Si quelqu'un est intéressé par le code
commenté en détail, je peux le lui envoyer par email.
Version compilée : http://seriot.ch/temp/docs/binaryFind.zip
-- makefile
binaryFind: binaryFind.c
cc -O4 binaryFind.c -o binaryFind
-- binaryFind.c
/* DL/NS, 200402/200507
*
* Compte les occurrences d'une chaîne dans un flots d'octets,
* affiche les positions des occurrences, algorithme en O(n).
*/
int initVectors(int *vector, const char *pattern) {
int i;
int patternLength = strlen(pattern);
for (i=0; i<128; i++) {
vector[i] = 0;
}
for (i=0; i<patternLength; i++) {
vector[pattern[i]] |= 1<<i;
}
return 0;
}
int byg(const char *pattern, FILE *file) {
char currentChar;
int foundCount = 0;
int result = 0;
int adr = -strlen(pattern);
int mask = 1 << (strlen(pattern)-1);
int vector[128];
Je cherche un outil (ou les paramètres appropriés à passer à un outil standard) qui puisse me donner la position de toutes les occurrences d'une chaîne dans un fichier (le fichier fait 50 Go en fait un "dump" d'un disque crashé obtenu avec dd).
Voici un programme très rapide, adapté d'un exercice fait à l'école d'ingénieurs.
Je poste le programme sans plus d'explications pour ne pas gâcher le plaisir des futurs étudiants. Si quelqu'un est intéressé par le code commenté en détail, je peux le lui envoyer par email.
Version compilée : http://seriot.ch/temp/docs/binaryFind.zip
-- makefile
binaryFind: binaryFind.c cc -O4 binaryFind.c -o binaryFind
-- binaryFind.c
/* DL/NS, 200402/200507 * * Compte les occurrences d'une chaîne dans un flots d'octets, * affiche les positions des occurrences, algorithme en O(n). */
int initVectors(int *vector, const char *pattern) { int i; int patternLength = strlen(pattern);
for (i=0; i<128; i++) { vector[i] = 0; }
for (i=0; i<patternLength; i++) { vector[pattern[i]] |= 1<<i; }
return 0; }
int byg(const char *pattern, FILE *file) { char currentChar; int foundCount = 0; int result = 0; int adr = -strlen(pattern); int mask = 1 << (strlen(pattern)-1); int vector[128];
for (i=0; i<patternLength; i++) { vector[pattern[i]] |= 1<<i;
Ohhh le beau dépacement de tableau !
Décidément les concepteurs de virus ont vraiment la part belle.
FiLH
-- Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle. Rolland Barthes. http://www.filh.org
Nicolas Seriot <junk@seriot.ch> wrote:
for (i=0; i<patternLength; i++) {
vector[pattern[i]] |= 1<<i;
Ohhh le beau dépacement de tableau !
Décidément les concepteurs de virus ont vraiment la part belle.
FiLH
--
Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire
une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle.
Rolland Barthes.
http://www.filh.org
for (i=0; i<patternLength; i++) { vector[pattern[i]] |= 1<<i;
Ohhh le beau dépacement de tableau !
Décidément les concepteurs de virus ont vraiment la part belle.
FiLH
-- Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle. Rolland Barthes. http://www.filh.org
Saïd
Nicolas Seriot :
Patrick Stadelmann wrote:
Je cherche un outil (ou les paramètres appropriés à passer à un outil standard) qui puisse me donner la position de toutes les occurrences d'une chaîne dans un fichier (le fichier fait 50 Go en fait un "dump" d'un disque crashé obtenu avec dd).
Voici un programme très rapide, adapté d'un exercice fait à l'école d'ingénieurs.
Je poste le programme sans plus d'explications pour ne pas gâcher le plaisir des futurs étudiants. Si quelqu'un est intéressé par le code commenté en détail, je peux le lui envoyer par email.
Version compilée : http://seriot.ch/temp/docs/binaryFind.zip
-- makefile
binaryFind: binaryFind.c cc -O4 binaryFind.c -o binaryFind
-- binaryFind.c
Ca marche pas pour les chaines de plus de 32 bits, ton programme??? Mais c'est astucieux.
-- Saïd. C programmers never die - they're just cast into void.
Nicolas Seriot :
Patrick Stadelmann <Patrick.Stadelmann@unine.ch> wrote:
Je cherche un outil (ou les paramètres appropriés à passer à un outil
standard) qui puisse me donner la position de toutes les occurrences
d'une chaîne dans un fichier (le fichier fait 50 Go en fait un "dump"
d'un disque crashé obtenu avec dd).
Voici un programme très rapide, adapté d'un exercice fait à l'école
d'ingénieurs.
Je poste le programme sans plus d'explications pour ne pas gâcher le
plaisir des futurs étudiants. Si quelqu'un est intéressé par le code
commenté en détail, je peux le lui envoyer par email.
Version compilée : http://seriot.ch/temp/docs/binaryFind.zip
-- makefile
binaryFind: binaryFind.c
cc -O4 binaryFind.c -o binaryFind
-- binaryFind.c
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
Mais c'est astucieux.
--
Saïd.
C programmers never die - they're just cast into void.
Je cherche un outil (ou les paramètres appropriés à passer à un outil standard) qui puisse me donner la position de toutes les occurrences d'une chaîne dans un fichier (le fichier fait 50 Go en fait un "dump" d'un disque crashé obtenu avec dd).
Voici un programme très rapide, adapté d'un exercice fait à l'école d'ingénieurs.
Je poste le programme sans plus d'explications pour ne pas gâcher le plaisir des futurs étudiants. Si quelqu'un est intéressé par le code commenté en détail, je peux le lui envoyer par email.
Version compilée : http://seriot.ch/temp/docs/binaryFind.zip
-- makefile
binaryFind: binaryFind.c cc -O4 binaryFind.c -o binaryFind
-- binaryFind.c
Ca marche pas pour les chaines de plus de 32 bits, ton programme??? Mais c'est astucieux.
-- Saïd. C programmers never die - they're just cast into void.
junk
Saïd wrote:
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
32 caractères, pas 32 bits.
Mais c'est vrai que j'aurais dû le préciser.
-- Nicolas Seriot
Saïd <said@brian.lan> wrote:
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
32 caractères, pas 32 bits.
Mais c'est vrai que j'aurais dû le préciser.
-- Nicolas Seriot
Saïd
Nicolas Seriot :
Saïd wrote:
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
32 caractères, pas 32 bits.
Oui, j'ai fourché. Passe les int en unsigned long long avec un exit si strlen(chaine)>sizeof(unsigned long long) *8 (on va dire qu'un char fait 8 bits). Ca devrait allet jusqu'a 64 caracteres.
-- Saïd. C programmers never die - they're just cast into void.
Nicolas Seriot :
Saïd <said@brian.lan> wrote:
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
32 caractères, pas 32 bits.
Oui, j'ai fourché. Passe les int en unsigned long long avec un exit si
strlen(chaine)>sizeof(unsigned long long) *8 (on va dire qu'un char fait 8
bits). Ca devrait allet jusqu'a 64 caracteres.
--
Saïd.
C programmers never die - they're just cast into void.
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
32 caractères, pas 32 bits.
Oui, j'ai fourché. Passe les int en unsigned long long avec un exit si strlen(chaine)>sizeof(unsigned long long) *8 (on va dire qu'un char fait 8 bits). Ca devrait allet jusqu'a 64 caracteres.
-- Saïd. C programmers never die - they're just cast into void.
filh
Saïd wrote:
Nicolas Seriot :
Saïd wrote:
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
32 caractères, pas 32 bits.
Oui, j'ai fourché. Passe les int en unsigned long long avec un exit si strlen(chaine)>sizeof(unsigned long long) *8 (on va dire qu'un char fait 8 bits). Ca devrait allet jusqu'a 64 caracteres.
Ben pourquoi pas sizeof (char) ?
C'est vraiment étonnant cette tendance des programmeurs à toujours laisser une constante en dur dans le code.
FiLH
-- Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle. Rolland Barthes. http://www.filh.org
Saïd <said@brian.lan> wrote:
Nicolas Seriot :
Saïd <said@brian.lan> wrote:
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
32 caractères, pas 32 bits.
Oui, j'ai fourché. Passe les int en unsigned long long avec un exit si
strlen(chaine)>sizeof(unsigned long long) *8 (on va dire qu'un char fait 8
bits). Ca devrait allet jusqu'a 64 caracteres.
Ben pourquoi pas sizeof (char) ?
C'est vraiment étonnant cette tendance des programmeurs à toujours
laisser une constante en dur dans le code.
FiLH
--
Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire
une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle.
Rolland Barthes.
http://www.filh.org
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
32 caractères, pas 32 bits.
Oui, j'ai fourché. Passe les int en unsigned long long avec un exit si strlen(chaine)>sizeof(unsigned long long) *8 (on va dire qu'un char fait 8 bits). Ca devrait allet jusqu'a 64 caracteres.
Ben pourquoi pas sizeof (char) ?
C'est vraiment étonnant cette tendance des programmeurs à toujours laisser une constante en dur dans le code.
FiLH
-- Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle. Rolland Barthes. http://www.filh.org
Saïd
FiLH :
Saïd wrote:
Nicolas Seriot :
Saïd wrote:
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
32 caractères, pas 32 bits.
Oui, j'ai fourché. Passe les int en unsigned long long avec un exit si strlen(chaine)>sizeof(unsigned long long) *8 (on va dire qu'un char fait 8 bits). Ca devrait allet jusqu'a 64 caracteres.
Ben pourquoi pas sizeof (char) ?
Parce que sizof(char) vaut toujours 1 en tout cas 8 ca ne s'est encore jamais vu.
-- Saïd. C programmers never die - they're just cast into void.
FiLH :
Saïd <said@brian.lan> wrote:
Nicolas Seriot :
Saïd <said@brian.lan> wrote:
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
32 caractères, pas 32 bits.
Oui, j'ai fourché. Passe les int en unsigned long long avec un exit si
strlen(chaine)>sizeof(unsigned long long) *8 (on va dire qu'un char fait 8
bits). Ca devrait allet jusqu'a 64 caracteres.
Ben pourquoi pas sizeof (char) ?
Parce que sizof(char) vaut toujours 1 en tout cas 8 ca ne s'est encore
jamais vu.
--
Saïd.
C programmers never die - they're just cast into void.
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
32 caractères, pas 32 bits.
Oui, j'ai fourché. Passe les int en unsigned long long avec un exit si strlen(chaine)>sizeof(unsigned long long) *8 (on va dire qu'un char fait 8 bits). Ca devrait allet jusqu'a 64 caracteres.
Ben pourquoi pas sizeof (char) ?
Parce que sizof(char) vaut toujours 1 en tout cas 8 ca ne s'est encore jamais vu.
-- Saïd. C programmers never die - they're just cast into void.
filh
Saïd wrote:
FiLH :
Saïd wrote:
Nicolas Seriot :
Saïd wrote:
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
32 caractères, pas 32 bits.
Oui, j'ai fourché. Passe les int en unsigned long long avec un exit si strlen(chaine)>sizeof(unsigned long long) *8 (on va dire qu'un char fait 8 bits). Ca devrait allet jusqu'a 64 caracteres.
Ben pourquoi pas sizeof (char) ?
Parce que sizof(char) vaut toujours 1 en tout cas 8 ca ne s'est encore jamais vu.
Certes j'ai un peu merdé, mais ça ne change rien que si on stocke la chaine sur autre chose que des char à 8 bits le code devient non portable...
Et c'est ça l'essentiel.
Dans ce cas : sizeof(char) * NBY
FiLH
-- Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle. Rolland Barthes. http://www.filh.org
Saïd <said@brian.lan> wrote:
FiLH :
Saïd <said@brian.lan> wrote:
Nicolas Seriot :
Saïd <said@brian.lan> wrote:
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
32 caractères, pas 32 bits.
Oui, j'ai fourché. Passe les int en unsigned long long avec un exit si
strlen(chaine)>sizeof(unsigned long long) *8 (on va dire qu'un char fait 8
bits). Ca devrait allet jusqu'a 64 caracteres.
Ben pourquoi pas sizeof (char) ?
Parce que sizof(char) vaut toujours 1 en tout cas 8 ca ne s'est encore
jamais vu.
Certes j'ai un peu merdé, mais ça ne change rien que si on stocke la
chaine sur autre chose que des char à 8 bits le code devient non
portable...
Et c'est ça l'essentiel.
Dans ce cas : sizeof(char) * NBY
FiLH
--
Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire
une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle.
Rolland Barthes.
http://www.filh.org
Ca marche pas pour les chaines de plus de 32 bits, ton programme???
32 caractères, pas 32 bits.
Oui, j'ai fourché. Passe les int en unsigned long long avec un exit si strlen(chaine)>sizeof(unsigned long long) *8 (on va dire qu'un char fait 8 bits). Ca devrait allet jusqu'a 64 caracteres.
Ben pourquoi pas sizeof (char) ?
Parce que sizof(char) vaut toujours 1 en tout cas 8 ca ne s'est encore jamais vu.
Certes j'ai un peu merdé, mais ça ne change rien que si on stocke la chaine sur autre chose que des char à 8 bits le code devient non portable...
Et c'est ça l'essentiel.
Dans ce cas : sizeof(char) * NBY
FiLH
-- Le fondement du constat bourgeois, c'est le bon sens, c'est-à-dire une vérité qui s'arrête sur l'ordre arbitraire de celui qui la parle. Rolland Barthes. http://www.filh.org
Eric Lévénez
Le 14/07/05 17:18, dans <1gzp994.1nha9cgt1ivfpN%, « FiLH » a écrit :
Dans ce cas : sizeof(char) * NBY
Par définition, en C, sizeof(char) vaut 1 dans tous les cas, même si char est un 32 bits, alors il ne faut jamais fait "* sizeof(char)", car cela ne sert à rien, autant faire "/ sizeof(char)". :-)
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Le 14/07/05 17:18, dans <1gzp994.1nha9cgt1ivfpN%filh@filh.orgie>, « FiLH »
<filh@filh.orgie> a écrit :
Dans ce cas : sizeof(char) * NBY
Par définition, en C, sizeof(char) vaut 1 dans tous les cas, même si char
est un 32 bits, alors il ne faut jamais fait "* sizeof(char)", car cela ne
sert à rien, autant faire "/ sizeof(char)". :-)
--
Éric Lévénez -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
Le 14/07/05 17:18, dans <1gzp994.1nha9cgt1ivfpN%, « FiLH » a écrit :
Dans ce cas : sizeof(char) * NBY
Par définition, en C, sizeof(char) vaut 1 dans tous les cas, même si char est un 32 bits, alors il ne faut jamais fait "* sizeof(char)", car cela ne sert à rien, autant faire "/ sizeof(char)". :-)
-- Éric Lévénez -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.