¿Hay alguna manera de hacer que objdump se lea desde STDIN en lugar de un archivo?
8
En mi caso específico, quiero usarlo para volcar lo que yo echo.
No quiero involucrar ningún archivo ...
¿Hay alguna forma de hacer una objdumplectura en su STDINlugar?
cat t2.o | objdump -d /dev/stdinNo funciona. /dev/stdinsolo funciona cuando corresponde a un archivo real. Como su solución requiere la presencia de ese archivo, esto no responde al OP.
Dragonroot
Esto puede funcionar para esta invocación objdumpen particular, pero puede fallar para otros en caso de que realice seekoperaciones en el archivo. Cuando las herramientas no tienen -para stdin, ese suele ser el caso.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
5
No puedes No hay forma de evitarlo, tendrá que usar el archivo temporal.
El archivo fuente readelf.c tiene esta comprobación incondicional (en binutils 2.22-8 al menos) antes de intentar abrir el archivo:
if(! S_ISREG (statbuf.st_mode)){
error (_("'%s' is not an ordinary file\n"), file_name);return1;}
Así que si el archivo es cualquier cosa menos archivo normal (como enlace simbólico, o dispositivo de caracteres como en el caso de /dev/stdin, /proc/self/fd/*, etc.) no va a funcionar.
Alternativamente, puede modificar la fuente y usar objdump modificado, pero ahí va su portabilidad.
Se está utilizando una especie de solución alternativa tee. Entonces, para desmontar un archivo llamado inputuso
cat input | tee a.out | objdump -d
Y, para dar un ejemplo para pasar algunos bytes con el echocomando, el siguiente debería ser un buen ejemplo (los parámetros se describen en esta buena respuesta SO ):
Para desmontar la secuencia de bytes del código x86
Respuestas:
siempre puedes hacer
o
muestra
fuente
cat t2.o | objdump -d /dev/stdin
No funciona./dev/stdin
solo funciona cuando corresponde a un archivo real. Como su solución requiere la presencia de ese archivo, esto no responde al OP.objdump
en particular, pero puede fallar para otros en caso de que realiceseek
operaciones en el archivo. Cuando las herramientas no tienen-
para stdin, ese suele ser el caso.No puedes No hay forma de evitarlo, tendrá que usar el archivo temporal.
El archivo fuente readelf.c tiene esta comprobación incondicional (en binutils 2.22-8 al menos) antes de intentar abrir el archivo:
Así que si el archivo es cualquier cosa menos archivo normal (como enlace simbólico, o dispositivo de caracteres como en el caso de
/dev/stdin
,/proc/self/fd/*
, etc.) no va a funcionar.Alternativamente, puede modificar la fuente y usar objdump modificado, pero ahí va su portabilidad.
fuente
Se está utilizando una especie de solución alternativa
tee
. Entonces, para desmontar un archivo llamadoinput
usoY, para dar un ejemplo para pasar algunos bytes con el
echo
comando, el siguiente debería ser un buen ejemplo (los parámetros se describen en esta buena respuesta SO ):Para desmontar la secuencia de bytes del código x86
ponerle el prefijo
0:
y usar el comandoSu salida es:
que es solo el código de ensamblaje para salir de un programa linux i386 con el código de salida 0xA.
fuente