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ファイル情報を取得し、出力から文字列を取得できますgrep32-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

関連情報