(前の章から続く)2つの実行可能ファイルを逆コンパイルします
Decompile Two Executable Files
最終アドレス:http://blog.csdn.net/eliot_shao/article/details/78648314
以前のメインコンテンツのレビュー:
前回の記事では、静的ライブラリを静的にコンパイルして生成し、静的ライブラリをリンクして実行可能ファイルを生成するプロセスを紹介しました。また、ダイナミックライブラリを動的にコンパイルして生成し、ダイナミックライブラリをリンクして実行可能ファイルを生成するプロセスも紹介しました。また、次の結論に達しました。
静的ライブラリをリンクすることによって生成された実行可能ファイルメイン実行は静的ライブラリの存在に依存しませんが、ダイナミックライブラリをリンクすることによって生成された実行可能ファイルmain2それはダイナミックライブラリの存在に依存します。
以下では、逆コンパイルを使用して上記の結論を分析します。
1:静的リンクライブラリをリンクして実行可能ファイルを生成する
gcc main.c -static-L。 -lstruct -o main
実行可能ファイルを逆コンパイルしますobjdump-D main> static_obj.txt
二:ダイナミックリンクライブラリをリンクして実行可能ファイルを生成する
gcc main.c-L。 -lstruct -o main二
実行可能ファイルを逆コンパイルしますobjdump-D main> shard_obj.txt
全体像の比較:
静的ライブラリをリンクすることによって生成された実行可能ファイルの逆コンパイル結果(ライブラリにはhello関数のみがあります):
ダイナミックライブラリ(ライブラリにはhello関数のみがあります)をリンクして生成された実行可能ファイルの逆コンパイル結果は、次の3つのステップで検索されます。
検索プロセス1、2、3は、ブログ投稿http://blog.csdn.net/eliot_shao/article/details/78549247の画像に反映されます。結局、ダイナミックライブラリをメモリにロードし、ダイナミックライブラリの対応するシンボル(hello)の場所を見つけることは、依然としてパーサーに依存しています。次に、helloにジャンプし、権限のハンドオーバーを実行すると、hello関数が実行されます。
.soの本質もelfであり、実行可能ファイルと同じです。 .aはelfファイルではないので、ここでは詳しく調べていません。下記参照。
結論として 2つの実行可能ファイルを逆コンパイルすると、2つの主な違いは動的リンクプロセスであることがわかります。前者は静的ライブラリの内容を実行可能ファイルにリンクしており、追加のポジショニングライブラリファイルは必要ありません。後者は「」パーサー「」通過するPLTとGOTダイナミックライブラリファイルをロードするには(。そう)メモリに移動してから、アクセスする機能を検索します。