OVH Cloud OVH Cloud

[Q] extraire du text d'un "binaire"

9 réponses
Avatar
Nicolas.MICHEL
Bonjour

Question d'un peu débutant.

Je cherche à extraire d'un alias sous Mac OS X le nom du fichier cible.
(Ces alias ne sont pas des symlink, c'est spécific au mac)

L'info est stockée dans une partie du fichier nomée resource fork, et
qui se présente comme un binaire quand on l'aborde au terminal.

On peut simplement faire un "more" ou un "cat" dessus, mais ça n'est pas
très lisible. Comment extraire la partie text de ce bouzin ?
La partie que je recherche dans l'exemple est
"ESCRIAH 49e 2005 n<A1> 01 - CH1003"

Mille merci d'avance :)

Voici l'exemple :

^@^@^A^@^@^@^B<AC>^@^@^A<AC>^@^@^@I^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A<A8>^@^@^@^@^A
<A8>^@^B^@^AESCRIAH 49e 2005 n<A1>01 -
CH1003<BC>X<E3><E6>BD^@^E^@^@^@^B^VPLAQUETTE
49eRIAH
2005^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@,@T<BD><8B>&<D3>^@<A7>^@+^C2^B<BF><FF><FF><FF><FF>^@^@^@
^S
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ESCRIAH 49e 2005 n<A1>01 -
CH1003^@^@^B^@2RIAH 49e 2005 n<A1>01 - CH1003:PLAQUETTE 49eRIAH 2005^@
^@<A8>^@<A8>afpm^@^@^@^@^@
^C^@^X^@9^@Y^@u^@<95>^@<9E>^A*^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^QPINGOUIN DES
ILES^@^@^@^@^@^@^@^@^@^@^@^@^@^@ESCRIAH 49e 2005
n<A1>01 -
CH1003^Gscorpio^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^F^.AppleCD<FF><FF>^@^@^@^@^A^@^@^@^B<AC>
^@^@^A<AC>^@^@^@ISORT^K<86>^@<80>^@^\^@2^@^@alis^@^@^@
^@^@^@^@^@^@^@^@^@N<8B^VPLAQUETTE 49eRIAH 2005



--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas

9 réponses

Avatar
Frédéric Peyron
Bonjour

Question d'un peu débutant.

Je cherche à extraire d'un alias sous Mac OS X le nom du fichier cible.
(Ces alias ne sont pas des symlink, c'est spécific au mac)

L'info est stockée dans une partie du fichier nomée resource fork, et
qui se présente comme un binaire quand on l'aborde au terminal.

On peut simplement faire un "more" ou un "cat" dessus, mais ça n'est pas
très lisible. Comment extraire la partie text de ce bouzin ?
La partie que je recherche dans l'exemple est
"ESCRIAH 49e 2005 n<A1> 01 - CH1003"

Mille merci d'avance :)

Voici l'exemple :

^@^@^A^@^@^@^B<AC>^@^@^A<AC>^@^@^@I^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^A<A8>^@^@^@^@^A
<A8>^@^B^@^AESCRIAH 49e 2005 n<A1>01 -
CH1003<BC>X<E3><E6>BD^@^E^@^@^@^B^VPLAQUETTE
49eRIAH
2005^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@,@T<BD><8B>&<D3>^@<A7>^@+^C2^B<BF><FF><FF><FF><FF>^@^@^@
^S
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ESCRIAH 49e 2005 n<A1>01 -
CH1003^@^@^B^@2RIAH 49e 2005 n<A1>01 - CH1003:PLAQUETTE 49eRIAH 2005^@
^@<A8>^@<A8>afpm^@^@^@^@^@
^C^@^X^@9^@Y^@u^@<95>^@<9E>^A*^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^QPINGOUIN DES
ILES^@^@^@^@^@^@^@^@^@^@^@^@^@^@ESCRIAH 49e 2005
n<A1>01 -
CH1003^Gscorpio^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^F^.AppleCD<FF><FF>^@^@^@^@^A^@^@^@^B<AC>
^@^@^A<AC>^@^@^@ISORT^K<86>^@<80>^@^^@2^@^@alis^@^@^@
^@^@^@^@^@^@^@^@^@N<8B^VPLAQUETTE 49eRIAH 2005





strings <nom_fichier>
A+

Avatar
Sébastien Kirche
Le 7 Feb 2005, Nicolas MICHEL s'est exprimé ainsi :

Bonjour

Question d'un peu débutant.

Je cherche à extraire d'un alias sous Mac OS X le nom du fichier cible.
(Ces alias ne sont pas des symlink, c'est spécific au mac)


Tu peux demander directement au Finder en passant par AppleScript (appelable
depuis le shell avec la commande osascript).

Un exemple (sur une seule ligne):
osascript -e 'tell application "Finder" to set toto to name of
(original item of alias "SeKiOSX:Users:seki:Desktop:seki")'

Retourne : «seki.xls»

Si tu récupères properties au lieu de name, tu verras que tu peux obtenir
d'autres infos comme le type, créateur, owner, ...)

Expérimente dans l'éditeur de scripts (ou mieux : dans Smile)

--
Sébastien Kirche

Avatar
Nicolas.MICHEL
Sébastien Kirche wrote:

Tu peux demander directement au Finder en passant par AppleScript (appelable
depuis le shell avec la commande osascript).

Un exemple (sur une seule ligne):
osascript -e 'tell application "Finder" to set toto to name of
(original item of alias "SeKiOSX:Users:seki:Desktop:seki")'

Retourne : «seki.xls»

Si tu récupères properties au lieu de name, tu verras que tu peux obtenir
d'autres infos comme le type, créateur, owner, ...)



Ok, Mille Merci Sébastien :)

Je cherche à localiser un CD à partir de son alias. Le CD n'est pas dans
le mac.

J'ai fait ce petit script dans script editor :

tell application "Finder"
get name of (original item of alias "HD:Users:nmichel:alias")
end tell



Et il me retourne :
'can t get name of original item of alias "HD:Users:nmichel:alias" '

Par contre si je met le disque dans le mac il me trouve le nom ou les
properties.

Bref, ça ne marche pas. Tu sais pas comment interroger des resources
fork via applescript ou mieux, un shell ?

--
Nicolas
Je n'aime pas Applescript. Mais alors pas du tout.
C'est pire que du post script.


Avatar
Nicolas.MICHEL
Frédéric Peyron wrote:

On peut simplement faire un "more" ou un "cat" dessus, mais ça n'est pas
très lisible. Comment extraire la partie text de ce bouzin ?


strings <nom_fichier>


Ok, merci Frédéric
Je vois donc que c'est pas un binaire en fait.
strings me bouffe des info et rends la chose encore moins lisible.
More est plus concluant.

A présent j'essaies de de bidouiller pour extraire l'info qui
m'intéresse, mais je sais pas comment faire une regex sur le caractère
ascii no 241. (c'est le petit rond de "No" ).

Je sais pas non-plus comment extraire les parties d'une ligne qui
corespondent à une regex.

(Je sais les remplacer avec un sed, ou afficher toute la ligne avec
grep, mais je sais pas extraire l'expression de la ligne)

Merci pour votre patience :)
--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas


Avatar
Sébastien Kirche
Le 7 fév 2005, Nicolas MICHEL s'est exprimé ainsi :

Je cherche à localiser un CD à partir de son alias. Le CD n'est pas dans
le mac.


Comment ça «localiser» ? Tu peux essayer de détailler un peu plus le but que
tu essaies d'atteindre ? Peut-être y a-t-il un meilleur moyen que
Applescript ou strings ?

Par exemple pour avoir les volumes montés, on peut interroger «disktool -l»
qui retourne les montages en cours (point de montage / device).

Tu veux récupérer le device du cdrom ?

J'ai fait ce petit script dans script editor :

tell application "Finder"
get name of (original item of alias "HD:Users:nmichel:alias")
end tell



Et il me retourne :
'can t get name of original item of alias "HD:Users:nmichel:alias" '

Par contre si je met le disque dans le mac il me trouve le nom ou les
properties.


Oui, certaines informations d'un alias ne sont accessibles que lorsque
l'original l'est aussi.

Bref, ça ne marche pas. Tu sais pas comment interroger des resources
fork via applescript ou mieux, un shell ?


Ça dépend aussi de ce que tu veux faire.

Par exemple en shell, on peut accéder a la ressource fork du fichier toto
(s'il en possède une) avec les outils classiques unix (grep, cat,...) en
attaquant toto/rsrc

Il doit y avoir des outils spécifiques pour accéder aux ressources dans les
commandes fournies par les Developper Tools (maintenant XCode).
On peut accéder/modifier les type, créateur et certainement pleines d'autres
caractéristique.

Je regarderai demain (je n'ai pas de mac sous la main le soir).

Mais d'ici là essaie d'indiquer ce que tu veux faire précisément.

--
Sébastien Kirche



Avatar
Nicolas.MICHEL
Sébastien Kirche wrote:

Le 7 fév 2005, Nicolas MICHEL s'est exprimé ainsi :

Je cherche à localiser un CD à partir de son alias. Le CD n'est pas dans
le mac.


Comment ça «localiser» ? Tu peux essayer de détailler un peu plus le but que
tu essaies d'atteindre ? Peut-être y a-t-il un meilleur moyen que
Applescript ou strings ?


C'est un collègue graphiste qui classe toutes ses archives sur CD.
Toutes ses affaires sont répertoriés par alias.
Il y a peu, il était sous Mac OS 9.
Quand il cliquait sur l'alias, le system lui disait "veuillez insérer le
CD machin"
Sous Mac OS X, quand il clique sur un alias, il lui dit "The volume for
alias_name can not be found", ce qui lui fait une belle jambe.

Je lui ai fait un miniscript qui fait un "more alias/rsrc" afin d'aller
chercher l'info à la source. Mais c'est assez peu convivial.
Je cherche donc un moyen de faire sortir l'info plus élégament.


Oui, certaines informations d'un alias ne sont accessibles que lorsque
l'original l'est aussi.


Beau progrès :-/
C'est stupide car l'info est présente dans l'alias.
Et il me semble que justement on utilises les resource fork pour que les
donées soit standardisées et donc accessibles facilement, non ?

Par exemple en shell, on peut accéder a la ressource fork du fichier toto
(s'il en possède une) avec les outils classiques unix (grep, cat,...) en
attaquant toto/rsrc


C'est ce que je fais :)

Je regarderai demain (je n'ai pas de mac sous la main le soir).



C'est vrais que j'avais pas pensé aux DevTools.
Je suis allé voir dans /Developpers/Tools, et je dois bien avouer que
j'y comprends rien. Il y a DeRez qui pourait faire un bout, mais
ensuite, comment extraire l'info ?

Mille merci :)
--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas


Avatar
Sébastien Kirche
Le 8 Feb 2005, Nicolas MICHEL a formulé :

Sous Mac OS X, quand il clique sur un alias, il lui dit "The volume for
alias_name can not be found", ce qui lui fait une belle jambe.

Je lui ai fait un miniscript qui fait un "more alias/rsrc" afin d'aller
chercher l'info à la source. Mais c'est assez peu convivial.
Je cherche donc un moyen de faire sortir l'info plus élégament.


J'ai une solution pour récupérer les infos du fichier alias.

Elle nécessite d'installer un complément de pilotage AppleScript (OSAX) sur la
machine dans ~/Library/ScriptingAdditions ou /Library/ScriptingAdditions (à
créer si le répertoire n'existe pas).

Le complément de pilotage rajoute des commandes au jeu de commandes standard
d'AppleScript. S'il est installé dans ~/Library/ScriptingAdditions ces
commandes ne seront disponible que pour l'utilsateur.

Cet osax Satimage est dispo ici :
http://www.satimage.fr/software/fr/downloads_osaxen.html

Il est également intéressant de récupérer l'éditeur Smile de Satimage comme
un bon remplaçant à l'éditeur de script du système.

Dans la ressource fork d'un alias, l'information qui nous intéresse se
trouve dans la ressource de type 'alis' n°0, visible (sous forme non
exploitable) avec l'ancien éditeur de ressources ResEdit.

Une fois l'osax installé, on a accès à la syntaxe suivante (exemple sur un
alias d'essai sur mon bureau, l'original étant éjecté) :

set toto to load resource 0 type "alis" from alias "SeKiOSX:Users:seki:Desktop:unCederom"
Retourne : alias "/Volumes/DevPrj 1"
("DevPrj 1" est le nom du cdrom tel qu'il apparaît lorsque monté sur le bureau.)

C'est aussi utilisable en shell avec osascript, il reste alors à filtrer le
chemin si on ne veut que le nom du volume.

Est-ce que c'est une solution acceptable ?

--
Sébastien Kirche

Avatar
Nicolas.MICHEL
Sébastien Kirche wrote:

Cet osax Satimage est dispo ici :
http://www.satimage.fr/software/fr/downloads_osaxen.html

Il est également intéressant de récupérer l'éditeur Smile de Satimage comme
un bon remplaçant à l'éditeur de script du système.


Ok, j'ai pas encore vu les aventages, mais pour ce que je fais de
applescript...

Dans la ressource fork d'un alias, l'information qui nous intéresse se
trouve dans la ressource de type 'alis' n°0, visible (sous forme non
exploitable) avec l'ancien éditeur de ressources ResEdit.

Une fois l'osax installé, on a accès à la syntaxe suivante (exemple sur un
alias d'essai sur mon bureau, l'original étant éjecté) :

set toto to load resource 0 type "alis" from alias
"SeKiOSX:Users:seki:Desktop:unCederom" Retourne : alias "/Volumes/DevPrj
1" ("DevPrj 1" est le nom du cdrom tel qu'il apparaît lorsque monté sur le
bureau.)


Vi, ça marche bien chez moi avec un alias tout frais, mais avec les
alias de mon copain ça plante. Je penses que c'est parcequ'ils ont été
créés sous Mac OS 9. Quand j'édites les resources de ces alias, il y a 7
type de resources à la place de 2 et le type "alis" est nettement plus
long. Etrange...

C'est aussi utilisable en shell avec osascript, il reste alors à filtrer le
chemin si on ne veut que le nom du volume.

Est-ce que c'est une solution acceptable ?


Si ça ne plantais pas, je crois que je pourais en faire quelque chose de
bien :)

Bon, merci beaucoup quand-même Sébastien. Je crois que je manque de
patience pour aller plus loin.

--
S'il n'y a pas de solutions, c'est qu'il n'y a pas de problèmes
iChat/AIM : michelnicolas

Avatar
Sébastien Kirche
Le 9 Feb 2005, Nicolas MICHEL vraute :

Vi, ça marche bien chez moi avec un alias tout frais, mais avec les
alias de mon copain ça plante. Je penses que c'est parcequ'ils ont été
créés sous Mac OS 9. Quand j'édites les resources de ces alias, il y a 7
type de resources à la place de 2 et le type "alis" est nettement plus
long. Etrange...


Effectivement, après vérification ici, il y a en plus des icônes dans le
raccourci MacOS 9.

C'est aussi utilisable en shell avec osascript, il reste alors à filtrer
le chemin si on ne veut que le nom du volume.

Est-ce que c'est une solution acceptable ?


Si ça ne plantais pas, je crois que je pourais en faire quelque chose de
bien :)


Le plantage est anormal àma. Comme je l'ai aussi expérimenté sur des
raccourcis MacOS 9, j'ai envoyé un rapport de bug avec les logs qui vont
bien à un développeur de chez Satimage, éditeur de Smile avec qui je suis en
contact.

Je vous tiendrais au courant.

[suivi chez moi, vu qu'on n'a plus tellement de rapport avec unix ;) ]

--
Sébastien Kirche