Recherche Binaire ou Comment rechercher une image dans un *.exe

Soyez le premier à donner votre avis sur cette source.

Vue 3 736 fois - Téléchargée 1 262 fois

Description

Beaucoup d'entres-vous sont persuadés qu'on ne peut que rechercher du texte
avec les fonctions de recherches classiques (Pos & PosEx ...)

Eh ben .... c'est totalement faux !!!
en effet il suffit de charger, correctement, les données(Binaires) à rechercher
dans une chaine de caractères et faire de même avec le fichier(binaire) servant
à la recherche.

Pour preuve, ci-joint le code qui recherche une Image dans une Application ou
un Fichier Dfm en Binaire le tout utilisant au choix :
PosEx (version ASM)
ou
BMHPascalNatifEx (une version du Boyer-Moore en pure pascal)

en ce qui concerne la, soit disant, limite de recherche de la table de saut
du Boyer-Moore à 256 caractères ...
Ici l'image recherchée fait 144 507 Octets
Donc bien au-dessus des 256 caractères

Le code compile aussi avec les versions Unicode de Delphi
Bien sur il y a des warnings (conversion implicite de AnsiString en string)
c'est normal et la correction est simple si on devait en avoir besoin ...

Mais le but ici était juste de prouver que l'on peut rechercher du binaire
avec des fonctions, prévues de base, pour les chaines de caractères ;)

Pour bien comprendre le code ...
Il faut faire abstraction du fait que string = chaine de caractères et basta !
Il faut voir le type string comme un conteneur multi-formats
et en respectant une règle simple :
Initialiser la taille de la string avant d'y copier des données

en respectant cela on peut y stocker tout et n'importe quoi

Mais quel est l'intérêt ? me direz-vous !
Il faut allouer l'espace nescessaire par un SetLength
tout comme les Pointeurs avec un GetMem mais contrairement à ces derniers
pas besoin de libérer les string alloués ... Delphi s'en charge
(autant de risque de fuite de mémoire en moins)

On peut utiliser toutes les fonctions prévues pour les string (recherche, copie ... )
Bien sur il est inutile d'essayer de les afficher dans un TMemo ou autre ^^

La flexibilitée de cette méthode est un atout non négligeable
surtout pour stocker et relire des données de formats différents
le tout dans un seul et même fichier

Et bien sur, les données sont toujours utilisables. Il y a 2 exemples dans le Zip
Une image chargé dans une string pour la démo de recherche
- chargement des données dans une string
- j'ai changé le mode d'affectation (MoveMemory) l'ancien code est en commentaire
- on effectue une recherche avec des fonctions standards pour string
- si trouvé on recopie les données trouvées avec la fonction copie
- et on affiche l'image trouvée à l'écran avec StrToImage (preuve du fonctionnement) ^^
- StrToImage ne sert qu'à afficher une image Jpeg contenue dans une string
Et pour varier un peu 2 sons au format wav
- chargement des données dans une string
- et utilisation direct des deux string pour jouer les sons avec PlaySound



@+ Cirec

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
68
Date d'inscription
jeudi 11 décembre 2008
Statut
Membre
Dernière intervention
16 juin 2019

Bonsoir,
Très intéressant en effet la démo.
Merci pour 'l'esprit' qui se dégage ci dessus.
A se revoir.
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
28 mai 2020
29
Super ...
On peut même se noter soit même !!!
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10 >
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
28 mai 2020

Il faut dire que l'intérêt baisse également, cela s'était calmé, mais avec la reprise de l'école les questions "devoir" vont refaire leur apparition.
Bonne fin de vacances (si d'actualité !)
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
28 mai 2020
29 >
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019

Tout à fait ... tu as raison ... mais il n'y a pas que ça ...

depuis la nouvelle version de CS (depuis CS_CCM) le site a perdu tout son intérêt ... pourtant ils avaient bien précisé qu'ils tiendraient compte de nos avis (avec promesses sur l'ancienne admin) ... mais rien n'a été fait dans ce sens au contraire, ils se sont juste contenté d'intégrer CS à CCM (autrement dit : ils ont intégré une équipe de F1 à un club de cart) et on se demande pourquoi tout le monde est passé à la concurrence ... le nouveau fonctionnement du site à retiré tout l'intérêt premier du site !!!

Tout les anciens Admin avaient flairés le coup ... mais l'équipe de CCM nous avaient rassurés ... tout serait fait pour que CS puisse s'épanouir ...
mais voilà ça fait un peu plus de 2 ans et c'est toujours comme au premier jour ... après tout ce temps mes propres snippets de code ont comme auteur un autre que moi !!!! et je ne suis pas le seul dans ce cas c'est valable pour tous le monde.

Tout ceci n'est qu'une partie des problèmes de fonctionnement ... mais ils ont déjà étés tous rapportés et reconnus comme devant être régler rapidement ... i l y a 2 ans :s

On se retrouve donc avec une équipe de cart qui rachète une écurie de F1 mais les pilotes, ingénieurs et mécanos sont quasi tous partis en laissant les voitures à l'abandon et tout le monde s'en cogne ... voilà où on en est !!! et c'est pas faute d'avoir prévenu.

Ce qui renforce le sentiment que CS n'est pas la priorité de CCM
c'est une triste réalité

Sur ce ... Bonne fin de vacances quand même ^^
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
13 >
Messages postés
3810
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
28 mai 2020

La question que je me pose, perso, c'est si ce site pourrait redevenir un jour aussi passionnant qu'avant.

Sans être particulièrement nostalgique du passé, je dois avouer que j'ai des tas de très bons souvenirs de CS et de son ambiance que je n'ai retrouvé nul part ailleurs.
Enfin, je suis prêt à participer si quelques uns s'y risquent aussi.
C'est vrai, il manque un site où on ne fait pas que résoudre les problèmes se posant aux pros mais où on s'amuse aussi en explorant les possibilités étonnantes de la programmation. Le côté "j'ai fait ça pour le fun" rend souvent les participations surprenantes et ouvre des horizons nouveaux. Et en espérant que les bonnes pratiques s'acquièrent par mimétisme.

Enfin bon, c'était la minute "nostalgie, quand tu nous tiens" d'un mec qui n'est pas Charlie :-p
Afficher les 14 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.