파일 대신 STDIN에서 objdump를 읽을 수있는 방법이 있습니까? 포함하고 싶지

내 경우에는 그것을 사용하여 덤프합니다 echo.
파일을 포함하고 싶지 않습니다 … 대신 읽을
수있는 방법이 있습니까?objdumpSTDIN



답변

당신은 항상 할 수 있습니다

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


답변

당신은 할 수 없습니다. 그 주위에 방법이 없습니다, 당신은 임시 파일을 사용해야합니다.

소스 파일 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있습니다. inputuse 라는 파일을 분해 하려면

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 프로그램을 종료하기위한 어셈블리 코드입니다.


답변