32비트 ELF 파일 검색

32비트 ELF 파일 검색

파일 시스템에서 단일 명령을 사용하여 32비트 ELF 개체에 대한 파일을 찾을 수 있는지 궁금합니다. 저는 실제로 Fedora 23 64비트에서 작업하고 있는데 이러한 파일을 찾을 수 없지만 제가 정확하게 수행하려는 연습에서는 32비트 ELF 파일이어야 한다고 나와 있습니다. 도와주셔서 감사합니다.

답변1

당신이 해야 할 일은 파일의 처음 5바이트가 7f 45 4c 46 01인지 확인하는 것뿐입니다 file. 따라서 각 파일의 5바이트만 읽으면 됩니다.

PERLIO=:raw find . -type f -size +51c -exec perl -lne '
  BEGIN{$/=\5};print $ARGV if $_ eq "\x7f\x45\x4c\x46\x01"; close ARGV' {} +

여기서는 최소 52바이트의 일반 파일만 확인합니다.ELF 헤더32비트 ELF 파일의 경우 ELF 파일은 일반적으로 이보다 훨씬 큽니다.

답변2

이 시도:

find . -type f -exec file '{}' \; | grep -i 'elf 32'

답변3

file이렇게 사용되는 명령을 의미합니까 ?

$ which ls
/bin/ls
$ file /bin/ls
/bin/ls: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=cecbb9e27978d91bc6fe2cc4d46d0cd58deafdb2, stripped
$ 

다음 find명령을 실행할 수 있습니다.file

$ find /bin -type f -exec file '{}' \; | grep -c "ELF 32-bit LSB  executable" 
88
$ find /bin -type f -exec file '{}' \; 2>&1  | grep  "ELF 32-bit LSB  executable" | head -2
/bin/bzip2: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=8ec5364bf1b5aae5a29b02aaa89db511e988f26a, stripped
/bin/more: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=2cf8c3651ba3e5dd6a053d40a969b4b7bca9cac0, stripped
$

답변4

를 사용 하여 find파일을 가져온 다음 file파일 정보를 가져오고 출력에서 ​​문자열을 검색할 수 있습니다 grep.32-bitfile

find /bin /usr/bin -type f -exec sh -c '{ file -L "$1" | grep -q 32-bit ;} \
      && echo "$1"' _ {} \;

필요에 맞게 검색 위치를 변경/추가하세요.

예:

% find /usr/bin -type f -exec sh -c '{ file -L "$1" | grep -q 32-bit ;} && echo "$1"' _ {} \; 
/usr/bin/unix2dos
/usr/bin/dos2unix

관련 정보