파일 대신 STDIN에서 objdump를 읽을 수있는 방법이 있습니까?


8

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


상황을 좀 더 설명해 주시겠습니까?
quanta

답변:


5

당신은 항상 할 수 있습니다

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


1
cat t2.o | objdump -d /dev/stdin작동하지 않습니다. /dev/stdin실제 파일에 해당하는 경우에만 작동합니다. 솔루션에 해당 파일이 있어야하므로 OP에 응답하지 않습니다.
dragonroot

이것은 objdump특히이 호출에 효과적 일 수 있지만 seek파일에서 작업을 수행하는 경우 다른 사람에게는 실패 할 수 있습니다 . 도구 -에 stdin 이 필요하지 않은 경우가 종종 있습니다.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

5

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

소스 파일 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를 사용할 수 있지만 이식성이 있습니다.


0

일종의 해결 방법이을 사용하고 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 프로그램을 종료하기위한 어셈블리 코드입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.