GNU/Linux >> Linux の 問題 >  >> Linux

`file`によって報告されたインタプリタは何を参照していますか?

perlを実行しようとしています Ubuntu 16.04のデバッグライブラリによって実行可能ファイルが提供されていますが、私のアーキテクチャに一致しているように見えても、何らかの理由でファイルが「実行可能ではありません」。

perl Ubuntu16.04に同梱されている実行可能ファイルは削除されます

$ nm /usr/bin/perl
nm: /usr/bin/perl: no symbols

perl-debug パッケージはperlを提供します / usr / lib / debugの下 それは取り除かれません。

$ nm /usr/lib/debug/usr/bin/perl | head
                 U [email protected]@GLIBC_2.2.5
0000000000589020 r AboveLatin1_invlist
                 U [email protected]@GLIBC_2.2.5
                 U [email protected]@GLIBC_2.2.5
000000000058e002 r a_hash.16944
                 U [email protected]@GLIBC_2.2.5
000000000058e010 r an_array.16943
00000000005795c0 r ASCII_invlist
0000000000543430 T ASCII_TO_NEED
                 U [email protected]@GLIBC_2.2.5

ただし、実行しようとすると、 exec * 失敗し、 bash 素敵なメッセージをお届けします:

$ /usr/lib/debug/usr/bin/perl
bash: /usr/lib/debug/usr/bin/perl: cannot execute binary file: Exec format error

fileを実行すると ただし、2つのPerlでは、デバッグPerlが「空のインタープリターを持っている」とマークされており、通常のPerlにはいくつかのld共有オブジェクトがあります。おそらくリンカーldと何らかの関係があります 、でもそれが何なのかわかりません。

$ file /usr/bin/perl
/usr/bin/perl: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e6106890a64a3316b2adfc04bbf202f13f82b5bb, stripped
$ file /usr/lib/debug/usr/bin/perl
/usr/lib/debug/usr/bin/perl: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter *empty*, for GNU/Linux 2.6.32, BuildID[sha1]=e6106890a64a3316b2adfc04bbf202f13f82b5bb, not stripped

fileとは正確には何ですか 通訳が空であると報告されたときに教えてくれますか?

承認された回答:

perl-debug perl (たとえば)GDBで使用するためのもので、実行中のプロセスまたは他の perlのダンプを理解するためのシンボルが含まれています 。たとえば、実行中のプロセス perl script.plがあるとします。 pid $ PIDを使用 、次を使用できます:

$ gdb /usr/lib/debug/usr/bin/perl $PID

それに接続し、その時点で通常のGDBのすべてのことを実行します。それ自体は実行可能な実行可能ファイルではなく、起動に必要な要素が不足しています。

シンボルはメインの実行可能ファイルの2倍以上のサイズであり、ほとんど必要ないため、別々に保持されます。この場合、シンボルは perlのデバッグに役立ちます。 、Perlスクリプトをデバッグするのではなく、おそらくリンクする拡張機能を開発している場合にのみ役立ちます。

実行可能ビットの設定は実際には必要ないと思いますが、Debianは私が見るデバッグシンボルファイルからそれらを削除しないので、それを必要とする状況があるかもしれません。 ファイル デバッグ情報に関係のないファイルがすべて欠落しているため、インタプリタが空であると通知しています。

関連:一致後、ファイルの最後までのすべての行を印刷するにはどうすればよいですか?
Linux
  1. Linux –ファイルパーミッションビットの後のドットはどういう意味ですか?

  2. Psの出力にはどういう意味がありますか?

  3. Rackspaceはクラウドで何をしますか?

  1. .pid ファイルとは何ですか? また、何が含まれていますか?

  2. rm はどのように機能しますか? rm は何をしますか?

  3. 実行権限は何をしますか?

  1. テールはファイル全体を読み取りますか?

  2. ファイルパーミッションの「s」属性はどういう意味ですか?

  3. ls -l のパーミッションの末尾にある + は何を意味しますか?