'file'が報告するインタプリタは何を参照しますか?

'file'が報告するインタプリタは何を参照しますか?

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

perlUbuntu 16.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 abort@@GLIBC_2.2.5
0000000000589020 r AboveLatin1_invlist
                 U accept@@GLIBC_2.2.5
                 U access@@GLIBC_2.2.5
000000000058e002 r a_hash.16944
                 U alarm@@GLIBC_2.2.5
000000000058e010 r an_array.16943
00000000005795c0 r ASCII_invlist
0000000000543430 T ASCII_TO_NEED
                 U atan2@@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

両方のPerlで実行すると、file通常のPerlにいくつかのld共有オブジェクトがあるデバッグPerlが「空のインタプリタを持つ」と表示されることがわかります。リンカーと関係があるかもしれませんが、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インタプリタが空であると報告した場合、正確に何を教えてください。

ベストアンサー1

perl-debugは、perl実行中のプロセスを理解することを含むGDBで使用されます。たとえば、perl実行中のプロセスのperl script.plpidが与えられた場合は、$PID次のものを使用できます。

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

ここに接続し、すべての一般的なGDB操作を実行します。。それ自体は実行可能な実行可能ファイルではなく、実行に必要な要素が不足しています。

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

実行可能ビットを設定することは本当に必要だとは思わないが、Debianは私が見たデバッグシンボルファイルからそれを削除しないので、場合によっては必要になるかもしれません。fileデバッグ情報に関連付けられていないファイルはすべて欠落しており、インタプリタが空であるため空です。

おすすめ記事