In meinem speziellen Fall möchte ich damit das ausgeben, was ich habe echo
.
Ich möchte keine Datei einbeziehen ...
Gibt es eine Möglichkeit, stattdessen zu objdump
lesen STDIN
?
In meinem speziellen Fall möchte ich damit das ausgeben, was ich habe echo
.
Ich möchte keine Datei einbeziehen ...
Gibt es eine Möglichkeit, stattdessen zu objdump
lesen STDIN
?
Antworten:
das kannst du immer tun
objdump -d /dev/stdin < t2.o
oder
cat t2.o | objdump -d /dev/stdin
Stichprobe
[root @ myhost cc] # objdump -h / dev / stdin <t2.o
/ dev / stdin: Dateiformat elf64-x86-64
Abschnitte: Idx Name Größe VMA LMA-
Datei aus Algn 0 .group 00000008 0000000000000000 0000000000000000 00000040 2 ** 2 INHALT, READONLY, EXCLUDE, GROUP, LINK_ONCE_DISCARD
cat t2.o | objdump -d /dev/stdin
funktioniert nicht. /dev/stdin
funktioniert nur, wenn es einer realen Datei entspricht. Da für Ihre Lösung das Vorhandensein dieser Datei erforderlich ist, wird das OP nicht beantwortet.
objdump
, für andere jedoch möglicherweise fehlschlagen, falls seek
Operationen an der Datei ausgeführt werden. Wenn Werkzeuge nicht -
für stdin haben, ist das oft der Fall.
Das kannst du nicht. Daran führt kein Weg vorbei, Sie müssen die temporäre Datei verwenden.
Die Quelldatei readelf.c hat diese bedingungslose Prüfung (mindestens in binutils 2.22-8), bevor überhaupt versucht wird, die Datei zu öffnen:
if (! S_ISREG (statbuf.st_mode))
{
error (_("'%s' is not an ordinary file\n"), file_name);
return 1;
}
Also , wenn die Datei alles andere als normale Datei ist (wie Symlink oder char Gerät wie bei /dev/stdin
, /proc/self/fd/*
usw.) wird es nicht funktionieren.
Alternativ können Sie die Quelle ändern und modifizierten objdump verwenden, aber Ihre Portabilität bleibt bestehen.
Eine Art Problemumgehung wird verwendet tee
. So zerlegen Sie eine Datei mit dem Namen input
use
cat input | tee a.out | objdump -d
Um ein Beispiel für die Übergabe einiger Bytes mit dem echo
Befehl zu geben, sollte Folgendes ein gutes Beispiel sein (Die Parameter werden in dieser guten SO-Antwort beschrieben ):
So zerlegen Sie die x86-Codebyte-Sequenz
b8 01 00 00 00 bb 0a 00 00 00 cd 80
Stellen Sie ihm 0:
den Befehl voran und verwenden Sie ihn
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
Seine Ausgabe ist:
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
Dies ist nur der Assemblycode zum Beenden eines i386-Linux-Programms mit dem Exit-Code 0xA.