タグ付けされた質問 「elf」

ELFは、Executable and Linkable Formatの略で、マシンコードを含むファイルのファイル形式です。

8
elfバイナリからコンパイラ情報を取得できますか?
Linuxでバイナリがどのように構築されたかを知る機会はありますか?(または他のUnix) コンパイラ、バージョン、時間、フラグなど... 私は見てreadelf、多くを見つけることができませんでしたが、バイナリコード/セクションなどを分析する他の方法があるかもしれません... 抽出方法を知っていることはありますか?

2
Linuxで動作する最も古いバイナリ?
ではLinuxのカーネルとGUIのABIでの後方互換性に関する議論、Alan Cox氏のノートは「と、まだ1992年に建てられたXローグバイナリを実行する私の3.6rcカーネルは、Linuxよりもはるかに古いアプリケーションに戻って互換性があります。」 Linuxはどれだけ後方互換性がありますか アプリケーションバイナリインターフェイスますか? 数年前に実際に作成およびコンパイルされた、最も古いバイナリ実行可能ファイルとは何ですか?それは、現代の汎用Linuxディストリビューションで引き続き実行されますか? これらの言葉はすべて解釈の対象になると確信しています。私の主な概念は、エミュレーターや専用の仮想マシンまたはバイナリトランスレーターを介して実行することはフェアではないということですが、そのようなものはおそらく現代のディストリビューションに組み込まれているので、それについて学ぶことはここでの楽しみの一部です。 ハードウェアアーキテクチャ、実行可能ファイル形式、言語、および主要なライブラリの動的読み込みの依存関係によるバリエーションも重要です。 ルールが緩和された場合、さらに遡る1つの例に注意してください。2002 Webページ現代のRed Hat Linux上で実行ファイルa.outを実行して使用することについて協議本当に古いLinuxのプリELFのa.out形式の実行ファイルやった後modprobe binfmt_aout と取得/lib/ld.soとlibc.so.4 、この質問のための周辺機器の関心のだが、物事の種類を示していることを再びそのさらに掘り下げるときに関与する可能性があります。 更新:あなたBSDのファンのためには、それはiBCS2のが(のようなゾーク/ダンジョン-2.5.6 1990年から)とSCO OpenServerの最近(2008年)のNetBSD 4.0.1のように5.0.xのアプリの古いXENIXアプリケーションをサポートしていることを確認するために素晴らしいことだiBCS2の& NetBSD | 仮想化をお楽しみください。しかし、NetBSD 5.0.xでも同じことが壊れているようです。 更新2:1年後、この質問の「アナウンサー」バッジを取得した後でも、私はまだ答えを探しています。そして、明確にするために、これはAPIについてであるため、少なくともほとんどの場合は元の方法で機能する「実際の」バイナリ(長さ0以外)でなければなりません。

10
プログラムがコンパイルされた形式で配布されないのはなぜですか?
しかし、彼らは次のような指示を与えます cd downloaded_program ./configure make install これにより、必要なELFと、おそらくいくつかの.soファイルが作成されます。 Windowsアプリのように、それらをダウンロード用のzipファイルに入れてみませんか?ユーザーがコンパイルする必要がある理由はありますか?

2
ELF Magicとは何ですか?
ELFマジックについての議論はこれまでにありましたが、ごく最近、このSecurity stack exchange questionのコメントがありました。私はそれが前に言及されたのを見た、そして私は自分のブートログでそれを見た..しかし、私はそれが何であるかわからない。 elf のmanページは、C言語や低レベルの言語を実行していないため、頭に少し載っています。 Linuxを毎日のオペレーティングシステムとして使用している人として、ELFとは何ですか?
26 elf 

1
/ bin / fileの出力で実行可能ファイルを参照する場合、「LSB」とはどういう意味ですか?
Linux でのコマンドの出力に「LSB実行可能ファイル」または「LSB共有オブジェクト」という用語が見つかりましたfile。例えば: $ file /bin/ls /bin/ls: 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]=4637713da6cd9aa30d1528471c930f88a39045ff, stripped この文脈で「LSB」とはどういう意味ですか?

1
fileコマンドでELFバイナリがLinux 2.6.9用であると表示されるのはなぜですか?
ELFバイナリでファイルを実行するたびに、次の出力が表示されます。 [jonescb@localhost ~]$ file a.out a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped Linux 2.6.9でこのバイナリが2.6.8で実行できなかったことで何が変わったのでしょうか?Linux 2.0ではELFサポートが追加されていませんか?
18 linux  executable  elf 

2
特定のプロセスが32ビットか64ビットかを判断する
2.6.x以降のLinuxカーネルと、ELF32バイナリとELF64バイナリの両方を実行できる既存のユーザーランド(つまり、LinuxでCPUが64ビットオペレーティングシステムをサポートしていることをどのように確認できますか?) PIDによる)32ビットモードまたは64ビットモードで実行されていますか? 素朴な解決策は、実行することです: file -L /proc/pid/exe | grep -o 'ELF ..-bit [LM]SB' しかし、その情報は/proc依存せずに直接公開されていlibmagicますか?
14 linux  64bit  proc  elf 

1
Linux、GNU GCC、ld、バージョンスクリプト、ELFバイナリ形式—仕組み
Linuxでのライブラリのバージョン管理と、それをすべて機能させる方法について詳しく学習しようとしています。コンテキストは次のとおりです。 -動的ライブラリの2つのバージョンがあり、同じインターフェイスセットを公開します(例:libsome1.soと)libsome2.so。 -アプリケーションはに対してリンクされていlibsome1.soます。 -このアプリケーションはlibdl.so、たとえば、別のモジュールを動的にロードするために使用しますlibmagic.so。 -今libmagic.soに対してリンクされていlibsome2.soます。明らかに、リンカスクリプトを使用してシンボルを非表示にせずにlibmagic.so、実行時のすべてのインターフェイスの呼び出しlibsome2.soはに解決されlibsome1.soます。これlibVersion()は、マクロの値に対して返される値をチェックすることで確認できますLIB_VERSION。 -だから、次にlibmagic.so、リンカスクリプトでコンパイルおよびリンクを試みます。リンカスクリプトは、3を除くすべてのシンボルを定義しlibmagic.so、それによってエクスポートされます。この作品...または少なくともlibVersion()とLIB_VERSION値が一致する(そしてそれは、バージョン2ではない1を報告します)。 -ただし、一部のデータ構造がディスクにシリアル化されると、破損が発生しました。アプリケーションのディレクトリlibsome1.soで、を指すようlibsome2.soにソフトリンクを削除して作成すると、すべてが期待どおりに機能し、同じ破損は発生しません。 私は仕方がありませんが、これは、実行時リンカーのシンボルの解決におけるいくつかの競合が原因であると考えられます。私は多くのことを試しましたlibsome2.so、すべてのシンボルが安定するようにリンクしようとしましたsymbol@@VER_2(コマンドがnm -CD libsome2.soまだシンボルをリストしているので、まだリストしsymbolていないので混乱していますsymbol@@VER_2)...何もうまくいかないようです!!! 助けて!!!!!!

1
いつ実行可能バイナリの文字列を編集できますか?
実行可能なバイナリがあります。それを呼び出しましょうa.out。バイナリに文字列が含まれていることがわかります $ strings a.out ... /usr/share/foo .... 文字列/usr/share/fooをに変更する必要があります/usr/share/bar。文字列をsed?に置き換えることはできますか? sed -i 's@/usr/share/foo@/usr/share/bar@' a.out これは安全なことのように見えます。これは、文字列が同じ長さでない場合にも機能しますか?


1
ELF実行可能ファイルのどの部分がメモリに読み込まれますか?
私がすでに知っていること: ELF実行可能ファイルにはいくつかのセクションがあり、.textセクションと.dataセクションはプログラムの主要な部分であるため、メモリにロードされます。しかし、プログラムが機能するためには、特に動的にリンクされている場合、より多くの情報が必要です。 私が興味を持っているのは、.plt、.got、.dynamic、.dynsym、.dynstrなどのセクションです。関数とアドレスのリンクを担当するELFの部分。 私がこれまでに理解できたことから、.symtabや.strtabなどのものがメモリにロードされない(またはとどまらない)ことです。しかし、リンカは.dynsymと.dynstrを使用していますか?彼らは記憶に残っていますか?プログラムコードからそれらにアクセスできますか? そして、カーネルメモリに常駐する実行可能ファイルの部分はありますか? これに対する私の関心は主に法医学ですが、このトピックに関する情報があれば役立ちます。これらのテーブルと動的リンクについて私が読んだリソースはより高レベルであり、それらは動作を説明するだけであり、メモリの内容について実用的なものは何もありません。 質問について不明な点がある場合はお知らせください。

1
readelfがLinuxではなくOSとして「System V」を表示するのはなぜですか?
ELFファイル形式を理解するために、gccを使用して小さなCプログラム(2行のコード)をコンパイルしました。readelf -hオブジェクトファイルでを行うと、ヘッダーにあります: OS/ABI: UNIX - System V 私はFedoraを使用していますが、なぜLinuxではないのですか? 編集:私が編集した int main(){ int x = 0; x++; } とgcc -o main.o -c main.c。私のgccバージョンは gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
10 linux  elf 

1
ELF実行可能ファイルからセクションヘッダーを削除しないのはなぜですか?
最小のELF実行可能ファイルが機能するには、ELFヘッダーと少なくとも1つのプログラムヘッダーのみが必要です。ただし、短い実行可能ファイルでストリップを実行すると、セクションヘッダーテーブルまたはセクション文字列セクションを破棄せずに、プログラムの実行に(私の知る限り)目的はありませんが、それらを保持します。 これらがストリップで削除されない理由はありますか?実行可能ファイルを実行するために必要でないすべてのものを削除する別のユーティリティはありますか?セクションヘッダーを削除するために作成していたコードゴルフ実行可能ファイルを手動で編集してみましたが、正常に機能し、はるかに小さく見えます。
9 executable  elf  strip 

1
bashはどのようにELFファイルを実行しますか?
Linux Boxにいるときは、bashをシェルとして使用します。今、私はbashがELFファイルの実行をどのように処理するかを疑問に思いました。私はbash-4.3.tar.gzをgrepしました。ファイルがELFであるかどうかを確認するためのマジック番号パーサーのようなものも、exec()システムコールも見つかりませんでした。 プロセスはどのように機能しますか?ELFの実行をbashがOSに渡す方法を教えてください。
8 bash  kernel  executable  exec  elf 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.