6

実行可能ファイルをメモリにロードする、共有ライブラリを動的にロードするなど、main()が呼び出される前に発生したことが気になります。実践的な演習でこれらのことを理解する方法について何か提案はありますか?

ツールと私が知っていること、そして今使っていることには、次のものが含まれます。

  • strace
  • 分解する
  • readelf
  • / proc / pid / map

注:私は優れた本のリンカーとローダーを知っていますが、実践的な演習は本を読むよりも私によく教えてくれるかもしれません。

4

5 に答える 5

3

バイナリがどのようにパックされているか、およびそのさまざまなセクションを確認したい場合は、objdumpが最適なプログラムだと思います。

実行可能ファイルを選択して実行します。


objdump -S <executable>  > myfile.S

もう1つの良い演習は次のとおりです。

  • 外部ライブラリを使用するプログラムを作成します
  • 静的リンクを使用してプログラムをコンパイルします
  • プログラムを実行する
  • ライブラリファイルの名前を変更し、プログラムが実行されているかどうかを確認します
  • 共有ライブラリを使用してプログラムをコンパイルします
  • ライブラリの名前を変更し、プログラムが実行されているかどうかを確認します

それは、カーテンの下で何が起こっているのか、そしてどのように起こっているのかについてのあなたの質問のいくつかに答えます。

于 2009-07-31T03:28:42.273 に答える
3
  • ld.so のマニュアル ページには、動的リンク プロセスを微調整するか、追加の詳細を提供するために設定できるいくつかの環境変数が記載されています。

例えば

LD_DEBUG=all cat </dev/null
  • Linux カーネル、ダイナミック リンカ、C ライブラリ、スタートアップ コード (crt0.o など) など、関連するあらゆる部分のソース コードを簡単に入手できます。コードを調べて、実験的な変更を加えることから始めることができます。
于 2009-07-31T06:02:57.863 に答える
2

関連する 2 つの興味深いリンク (少なくとも Linux の場合) と、前述の本よりも少し短いリンク (リンカーとローダー) を見つけました。

于 2011-05-16T07:46:29.403 に答える
1

大学で OS の授業を受けたとき、私たちはNachosを使いました。それ自体はオペレーティング システムではなく、ユーザー空間で実行される一種のオペレーティング システムの「シミュレーション」です。これは C++ で書かれており、Nachos が読み込んで実行できる実行可能ファイルをクロスコンパイルできます。システム コール インターフェイスをいじったり、コードをいじって好きなだけ実験したりできます。

Solaris ラボで実行しましたが、個人のマシンの Linux で起動して実行するのに苦労しましたが、コードを掘り下げたいと思っているなら、楽しいおもちゃになるかもしれません。

于 2009-07-31T03:31:16.343 に答える
1

あなたが探しているものはおそらくたくさんあると思いますが、独自のアセンブラーとリンカーを作成することは非常に教育的です. 大学時代にやっていて、大好きでした。思い出すと、やりたい基本的なことを機能させるのに、おそらく120時間の作業が必要でした. このプロジェクトは何よりも、プログラミングのキャリアが自分に向いていることを確信させてくれたと思います。

于 2009-07-31T03:31:29.320 に答える