Existe uma maneira de fazer objdump ler de STDIN em vez de um arquivo?
8
No meu caso específico, quero usá-lo para despejar o que eu echo.
Não quero envolver nenhum arquivo ...
Existe uma maneira de fazer a objdumpleitura STDIN?
cat t2.o | objdump -d /dev/stdinnão funciona. /dev/stdinsó funciona quando corresponde a um arquivo real. Como sua solução exige a presença desse arquivo, isso não responde ao OP.
dragonroot
Isso pode funcionar para essa chamada objdumpem particular, mas pode falhar para outras pessoas, caso faça seekoperações no arquivo. Quando as ferramentas não são necessárias -para o stdin, esse geralmente é o caso.
Ciro Santilli publicou 28/08/15
5
Você não pode. Não há como contornar isso, você terá que usar o arquivo temporário.
O arquivo de origem readelf.c possui essa verificação incondicional (pelo menos nos binutils 2.22-8) antes mesmo de tentar abrir o arquivo:
if(! S_ISREG (statbuf.st_mode)){
error (_("'%s' is not an ordinary file\n"), file_name);return1;}
Então, se o arquivo não é nada arquivo regular (como ligação simbólica, ou dispositivo de char como no caso de /dev/stdin, /proc/self/fd/*, etc.) que não vai funcionar.
Como alternativa, você pode modificar a fonte e usar o objdump modificado, mas a portabilidade é a mesma.
Um tipo de solução alternativa está usando tee. Então, para desmontar um arquivo chamado inputuse
cat input | tee a.out | objdump -d
E, para dar um exemplo de passagem de alguns bytes com o echocomando, o seguinte deve ser um bom exemplo (Os parâmetros são descritos nesta boa resposta do SO ):
Respostas:
você sempre pode fazer
ou
amostra
fonte
cat t2.o | objdump -d /dev/stdin
não funciona./dev/stdin
só funciona quando corresponde a um arquivo real. Como sua solução exige a presença desse arquivo, isso não responde ao OP.objdump
em particular, mas pode falhar para outras pessoas, caso façaseek
operações no arquivo. Quando as ferramentas não são necessárias-
para o stdin, esse geralmente é o caso.Você não pode. Não há como contornar isso, você terá que usar o arquivo temporário.
O arquivo de origem readelf.c possui essa verificação incondicional (pelo menos nos binutils 2.22-8) antes mesmo de tentar abrir o arquivo:
Então, se o arquivo não é nada arquivo regular (como ligação simbólica, ou dispositivo de char como no caso de
/dev/stdin
,/proc/self/fd/*
, etc.) que não vai funcionar.Como alternativa, você pode modificar a fonte e usar o objdump modificado, mas a portabilidade é a mesma.
fonte
Um tipo de solução alternativa está usando
tee
. Então, para desmontar um arquivo chamadoinput
useE, para dar um exemplo de passagem de alguns bytes com o
echo
comando, o seguinte deve ser um bom exemplo (Os parâmetros são descritos nesta boa resposta do SO ):Para desmontar a sequência de bytes do código x86
prefixe-o
0:
e use o comandoSua saída é:
que é apenas o código de montagem para sair de um programa linux i386 com o código de saída 0xA.
fonte