Gibt es eine Möglichkeit, objdump anstelle einer Datei von STDIN lesen zu lassen?
8
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 objdumplesen STDIN?
cat t2.o | objdump -d /dev/stdinfunktioniert nicht. /dev/stdinfunktioniert nur, wenn es einer realen Datei entspricht. Da für Ihre Lösung das Vorhandensein dieser Datei erforderlich ist, wird das OP nicht beantwortet.
Drachenwurzel
Dies kann insbesondere für diesen Aufruf von funktionieren objdump, für andere jedoch möglicherweise fehlschlagen, falls seekOperationen an der Datei ausgeführt werden. Wenn Werkzeuge nicht -für stdin haben, ist das oft der Fall.
Ciro Santilli 28 病毒 审查 六四 事件 28
5
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);return1;}
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 inputuse
cat input | tee a.out | objdump -d
Um ein Beispiel für die Übergabe einiger Bytes mit dem echoBefehl 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 01000000 bb 0a000000 cd 80
Stellen Sie ihm 0:den Befehl voran und verwenden Sie ihn
Antworten:
das kannst du immer tun
oder
Stichprobe
quelle
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, fallsseek
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:
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.
quelle
Eine Art Problemumgehung wird verwendet
tee
. So zerlegen Sie eine Datei mit dem Nameninput
useUm 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
Stellen Sie ihm
0:
den Befehl voran und verwenden Sie ihnSeine Ausgabe ist:
Dies ist nur der Assemblycode zum Beenden eines i386-Linux-Programms mit dem Exit-Code 0xA.
quelle