Linux組み込みコマンドのソースコードを表示するには? [コピー]

Linux組み込みコマンドのソースコードを表示するには? [コピー]

ping私が知っている限り、greporまたは同じコマンドを実行すると、lsLinuxオペレーティングシステムはそのコマンド名を見つけるためにディレクトリを検索します/bin。また、ほとんどのLinuxコマンドがCで書かれていることも知っています。

ping実際のCでORがどのようにls書かれているのか見たかったです。ちなみにcatファイルを使うとcat /bin/pingバイナリ形式なのでガベージデータを吐き出します。

それでは、Cで書かれたコマンドを見る方法はありますか?

答え1

どのパッケージがコマンドを提供しているかを知ることが役立ちます。たとえば、多くの(すべてではない!)Linuxディストリビューションでは、このlsコマンドはGNUパッケージで提供されていますcoreutils。次のリンクから、これらのコマンドのソースを見つけることができます。coreutils ウェブページ

このpingコマンドはパッケージで提供されますiputils。ソースを見つけることができます。ここ


ほとんどのディストリビューションは、どのパッケージが特定のファイルを所有しているかを確認するメカニズムを提供します。たとえば、Ubuntuではdpkg-query次のように使用できます。

$ dpkg-query -S /bin/ls
coreutils: /bin/ls

Red Hat / Fedora / CentOS / etcに対応するコマンドは次のとおりです。

$ rpm -qf /bin/ls
coreutils-8.32-33.fc35.x86_64

興味のあるファイルを提供するパッケージがわかっている場合は、通常、ディストリビューションが提供する適切なソースパッケージを見つけてソースコードを見つけることができます。 Ubuntuの場合は、以下を訪問できます。https://packages.ubuntu.com/名前でパッケージを見つけると、iputils次のようになります。ここ、パッケージの構築に使用されたソースをダウンロードするためのリンクを見つけることができます。

Fedoraパッケージの場合は、以下をご覧ください。https://packages.fedoraproject.org/パッケージを検索してみてください。この場合、ファイルを読み取る必要がありますspec(例:これはiputilsからのものです。)ソースをどこで見つけることができるかをご覧ください。

UbuntuまたはFedora以外のシステムを使用している場合は、同様のメカニズムを使用できます。ほとんどのディストリビューションは、名前でソースパッケージをダウンロードするためのコマンドラインツールも提供しています。

答え2

と言うと、cat /bin/pingCソースコードでコンパイルされたコマンドのバイナリコードを見ようとするのです。このコマンドのCソースコードを見つける必要があります。よりシェルコマンドのソースコードを読み取るには?より多くの情報を知りたいです。

答え3

Linuxでは、次のようなバイナリコマンドを分析するいくつかの方法があります。

  1. ファイル、ファイルの種類を決定します。
  2. ldd は共有オブジェクトの依存関係を出力します。
  3. ltrace、ライブラリ呼び出しトラッカー。
  4. Hexdumpはファイルの内容をASCII、10進数、16進数、または8進数で表示します。
  5. 文字列、印刷ファイルの印刷可能な文字列です。
  6. readelf は ELF ファイルに関する情報を表示します。
  7. objdumpはターゲットファイルの情報を表示します。
  8. strace はシステムコールとシグナルを追跡します。
  9. nm、オブジェクトファイルのシンボルを一覧表示します。
  10. gdb、GNUデバッガ。

関連情報