Existe-t-il un moyen de faire lire objdump depuis STDIN au lieu d'un fichier?
8
Dans mon cas spécifique, je veux l'utiliser pour vider ce que je echo.
Je ne veux pas impliquer de fichier ...
Y a-t-il un moyen de faire une objdumplecture à la STDINplace?
cat t2.o | objdump -d /dev/stdinne marche pas. /dev/stdinne fonctionne que lorsqu'il correspond à un vrai fichier. Étant donné que votre solution nécessite la présence de ce fichier, cela ne répond pas à l'OP.
dragonroot
Cela peut fonctionner pour cette invocation de objdumpen particulier, mais il peut échouer pour d'autres au cas où il effectue des seekopérations sur le fichier. Lorsque les outils n'ont pas -pour stdin, c'est souvent le cas.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
5
Tu ne peux pas. Il n'y a aucun moyen de contourner cela, vous devrez utiliser le fichier temporaire.
Le fichier source readelf.c a cette vérification inconditionnelle (dans binutils 2.22-8 au moins) avant même d'essayer d'ouvrir le fichier:
if(! S_ISREG (statbuf.st_mode)){
error (_("'%s' is not an ordinary file\n"), file_name);return1;}
Donc , si le fichier est tout sauf un fichier régulier (comme symlink ou dispositif char comme dans le cas de /dev/stdin, /proc/self/fd/*, etc.) , il ne fonctionnera pas.
Alternativement, vous pouvez modifier la source et utiliser objdump modifié, mais là est votre portabilité.
Une sorte de solution de contournement utilise tee. Donc, pour démonter un fichier nommé inputuse
cat input | tee a.out | objdump -d
Et, pour donner un exemple de passage de quelques octets avec la echocommande, ce qui suit devrait être un bon exemple (les paramètres sont décrits dans cette bonne réponse SO ):
Réponses:
tu peux toujours faire
ou
échantillon
la source
cat t2.o | objdump -d /dev/stdin
ne marche pas./dev/stdin
ne fonctionne que lorsqu'il correspond à un vrai fichier. Étant donné que votre solution nécessite la présence de ce fichier, cela ne répond pas à l'OP.objdump
en particulier, mais il peut échouer pour d'autres au cas où il effectue desseek
opérations sur le fichier. Lorsque les outils n'ont pas-
pour stdin, c'est souvent le cas.Tu ne peux pas. Il n'y a aucun moyen de contourner cela, vous devrez utiliser le fichier temporaire.
Le fichier source readelf.c a cette vérification inconditionnelle (dans binutils 2.22-8 au moins) avant même d'essayer d'ouvrir le fichier:
Donc , si le fichier est tout sauf un fichier régulier (comme symlink ou dispositif char comme dans le cas de
/dev/stdin
,/proc/self/fd/*
, etc.) , il ne fonctionnera pas.Alternativement, vous pouvez modifier la source et utiliser objdump modifié, mais là est votre portabilité.
la source
Une sorte de solution de contournement utilise
tee
. Donc, pour démonter un fichier nomméinput
useEt, pour donner un exemple de passage de quelques octets avec la
echo
commande, ce qui suit devrait être un bon exemple (les paramètres sont décrits dans cette bonne réponse SO ):Pour démonter la séquence d'octets de code x86
préfixez-le avec
0:
et utilisez la commandeSa sortie est:
qui est juste le code assembleur pour quitter un programme linux i386 avec le code de sortie 0xA.
la source