Nel mio caso specifico, voglio usarlo per scaricare ciò che io echo
.
Non voglio coinvolgere alcun file ...
Esiste un modo per objdump
leggere STDIN
invece?
Nel mio caso specifico, voglio usarlo per scaricare ciò che io echo
.
Non voglio coinvolgere alcun file ...
Esiste un modo per objdump
leggere STDIN
invece?
Risposte:
puoi sempre fare
objdump -d /dev/stdin < t2.o
o
cat t2.o | objdump -d /dev/stdin
campione
[root @ myhost cc] # objdump -h / dev / stdin <t2.o
/ dev / stdin: formato file elf64-x86-64
Sezioni: Nome
IDx Dimensione VMA LMA File off Algn 0 .group 00000008 0000000000000000 0000000000000000 00000040 2 ** 2 CONTENUTO, PRONTO, ESCLUDI, GRUPPO, LINK_ONCE_DISCARD
cat t2.o | objdump -d /dev/stdin
non funziona. /dev/stdin
funziona solo quando corrisponde a un file reale. Poiché la soluzione richiede la presenza di quel file, questo non risponde all'OP.
objdump
in particolare, ma potrebbe non riuscire per altri nel caso in cui esegua seek
operazioni sul file. Quando gli strumenti non hanno -
per lo stdin, questo è spesso il caso.
Non puoi. Non c'è niente da fare, dovrai usare il file temporaneo.
Il file sorgente readelf.c ha questo controllo incondizionato (almeno in binutils 2.22-8) prima ancora di tentare di aprire il file:
if (! S_ISREG (statbuf.st_mode))
{
error (_("'%s' is not an ordinary file\n"), file_name);
return 1;
}
Quindi, se il file è tutt'altro che normale file (come collegamento simbolico, o dispositivo char come nel caso di /dev/stdin
, /proc/self/fd/*
e così via) non funzionerà.
In alternativa, è possibile modificare l'origine e utilizzare objdump modificato, ma va bene la portabilità.
È in uso una sorta di soluzione alternativa tee
. Quindi per smontare un file chiamato input
use
cat input | tee a.out | objdump -d
E, per dare un esempio per il passaggio di alcuni byte con il echo
comando, il seguente dovrebbe essere un buon esempio (i parametri sono descritti in questa buona risposta SO ):
Per smontare la sequenza di byte del codice x86
b8 01 00 00 00 bb 0a 00 00 00 cd 80
prefissalo con 0:
e usa il comando
echo "0: b8 01 00 00 00 bb 0a 00 00 00 cd 80" | xxd -r | tee a.out | objdump -D -Mintel,i386 -b binary -m i386
Il suo output è:
a.out: file format binary
Disassembly of section .data:
00000000 <.data>:
0: b8 01 00 00 00 mov eax,0x1
5: bb 0a 00 00 00 mov ebx,0xa
a: cd 80 int 0x80
che è solo il codice assembly per uscire da un programma Linux i386 con il codice di uscita 0xA.