답변:
당신은 항상 할 수 있습니다
objdump -d /dev/stdin < t2.o
또는
cat t2.o | objdump -d /dev/stdin
견본
[root @ myhost cc] # objdump -h / dev / stdin <t2.o
/ dev / stdin : 파일 형식 elf64-x86-64
섹션 : Idx 이름 크기 VMA LMA
파일 꺼짐 Algn 0 .group 00000008 0000000000000000 0000000000000000 00000040 2 ** 2 목차, READONLY, EXCLUDE, GROUP, LINK_ONCE_DISCARD
cat t2.o | objdump -d /dev/stdin
작동하지 않습니다. /dev/stdin
실제 파일에 해당하는 경우에만 작동합니다. 솔루션에 해당 파일이 있어야하므로 OP에 응답하지 않습니다.
objdump
특히이 호출에 효과적 일 수 있지만 seek
파일에서 작업을 수행하는 경우 다른 사람에게는 실패 할 수 있습니다 . 도구 -
에 stdin 이 필요하지 않은 경우가 종종 있습니다.
당신은 할 수 없습니다. 그 주위에 방법이 없습니다, 당신은 임시 파일을 사용해야합니다.
소스 파일 readelf.c는 파일을 열려고 시도하기 전에이 무조건 검사 (binutils 2.22-8 이상)를 갖습니다.
if (! S_ISREG (statbuf.st_mode))
{
error (_("'%s' is not an ordinary file\n"), file_name);
return 1;
}
파일이 아무것도하지만, 일반 파일입니다 그래서 경우 (심볼릭 링크와 같은, 또는 문자 장치의 경우와 같이 /dev/stdin
, /proc/self/fd/*
등)이 작동하지 않습니다.
또는 소스를 수정하고 수정 된 objdump를 사용할 수 있지만 이식성이 있습니다.
일종의 해결 방법이을 사용하고 tee
있습니다. input
use 라는 파일을 분해 하려면
cat input | tee a.out | objdump -d
그리고 echo
명령으로 일부 바이트를 전달하는 예제를 제공 하려면 다음이 좋은 예입니다 (매개 변수는 이 좋은 SO answer에 설명되어 있습니다 ).
x86 코드 바이트 시퀀스를 분해하려면
b8 01 00 00 00 bb 0a 00 00 00 cd 80
접두사를 붙여 0:
명령을 사용하십시오.
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
출력은 다음과 같습니다.
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
종료 코드 0xA로 i386 Linux 프로그램을 종료하기위한 어셈블리 코드입니다.