実行可能ファイルからオブジェクトファイルのリンクを解除することは可能ですか?

シルバーガスプ

背景: Gentoo LinuxのPortageに似たパッケージマネージャーの開発を検討しています(Portageをフォークしてしまう可能性があります)。Gentooについてほとんど知らない人にとっては、ソースベースのディストリビューションです。つまり、すべてのパッケージがソースコードからコンパイルされます。現在、プログラムをオブジェクトファイルにコンパイルしてから実行可能ファイルにコンパイルすることができます。

$ gcc -c  a.c -o a.o
$ gcc -c  b.c -o b.o
$ gcc a.o b.o -o executable

Portageに加えたい改善点は次のとおりです。

  1. 更新されたオブジェクトファイルのみを再コンパイルする機能(GITなどを使用して変更を追跡する)。
  2. 実行可能ファイルをオブジェクトファイルに逆コンパイル/リンク解除します。
  3. オブジェクトファイルを再コンパイル/再リンクして、古いオブジェクトファイルのみを更新されたオブジェクトファイルに置き換えます(変更はGITなどを使用して追跡されます)。
  4. 次に、新しくコンパイルされたパッケージが古いパッケージを置き換えます。(簡単な作業)

理由:私はArch linuxユーザーであり、ソースベースのディストリビューションのアイデアを気に入っていますが、システムを最新の状態に保つという膨大なタスクに煩わされることはありません。また、ほとんどの作業は小さなハードドライブを備えたラップトップコンピューターで行います。そのため、大量のスペースを占めるオブジェクトファイルを保持するのではなく、実行可能ファイルをオブジェクトファイルに逆コンパイル/リンク解除する理由があります。また、ほとんどのソースコードを再コンパイルする必要性が大幅に減少するため、システムの全体的なコンパイル時間が短縮される可能性があります。また、完全に再コンパイルしなくても、パッケージのUSEフラグを簡単に変更できるようになります。

質問:オブジェクトファイルを実行可能ファイルにコンパイルしてから、逆コンパイルしてオブジェクトファイルに戻すことは可能ですか?この例を以下に示します。

$ gcc -c  a.c -o a.o
$ gcc -c  b.c -o b.o
$ gcc a.o b.o -o executable

その後

$ SomeCommand executable 
output << a.o b.o

これが現在不可能な場合。$ldプログラムを意図的に「リバースエンジニアリング可能」にするために、GNUのリンカー " "のバージョンを変更して、オブジェクトファイルをリンクするときに行った変更をログに記録することは可能でしょうか

編集:これの別の使用法は、単一のオブジェクトファイルを大きなプロジェクトの実行可能ファイルから分離しすぎて、分離されたオブジェクトファイルを新しいものと交換して再度リンクすることです。これにより、1つだけが更新されたときに、多くの異なるファイルから大きなプロジェクトを再リンクするオーバーヘッドが削減されます。これにより、バイナリレベルでのインクリメンタルコンパイルが可能になります。

スネフテル

いいえ、これは不可能です。リンカの作業の大部分は、シンボリック参照(リンクされているオブジェクトファイルの任意の組み合わせに対して有効)を数値オフセット(リンカがオブジェクトファイルの特定の組み合わせ、その特定の時間にレイアウトすることを決定した特定の方法に対してのみ有効)に置き換えることです。 。この方法で参照が「ベイク」されると、それらを復元することはできません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

XMLファイルから複数のオブジェクトを作成することは可能ですか?

分類Dev

この方法でファイルオブジェクトを送信することは可能ですか?

分類Dev

Javaプロジェクトを実行可能ファイルにすることは可能ですか?

分類Dev

複数のファイルで同じオブジェクトを使用することは可能ですか?

分類Dev

C ++でオブジェクトのインクルードファイルの名前を取得することは可能ですか?

分類Dev

多くの非メインクラスのオブジェクトを、メインの実行可能Javaファイル以外のファイルに宣言できますか?もしそうなら、どのように:それはクラスなどになることができますか?

分類Dev

永続オブジェクトをファイルシステムに保存することは可能ですか

分類Dev

送信から実際のリンクファイルを取得することは可能ですか?

分類Dev

exeファイルをlibファイルとして別のプロジェクトにリンクすることは可能ですか?

分類Dev

so(共有オブジェクト)ファイルからすべてのコードを回復することは可能ですか?

分類Dev

ファイルとその実行可能ファイルの間に永続的なリンクを確立することは可能ですか?

分類Dev

ファイルとその実行可能ファイルの間に永続的なリンクを確立することは可能ですか?

分類Dev

ジオメトリデータをシェープファイルからQGISからCSVにエクスポートすることは可能ですか?

分類Dev

共有オブジェクトファイルと再配置可能ファイルの違いは何ですか?

分類Dev

メインファイルがあるディレクトリの外からPythonファイルをインポートすることは可能ですか?

分類Dev

mmapファイルをbytesオブジェクトとして扱うことは可能ですか?

分類Dev

オクテットストリームからファイル名を抽出することは可能ですか?

分類Dev

オクテットストリームからファイル名を抽出することは可能ですか?

分類Dev

実行可能なスレッドの宣言内でインタラクティブシェルにファイルを書き込むことは可能ですか?

分類Dev

ディレクトリCのファイルからディレクトリBにtarアーカイブを作成するディレクトリAでtarコマンドを実行することは可能ですか?

分類Dev

スプリングブートで構成可能な再試行可能なmaxAttemptsとapplication.propertiesファイルからのバックオフを作成する方法

分類Dev

Pythonオブジェクト(特にsklearnモデル)をメモリマップファイルに保存することは可能ですか?

分類Dev

SonarlintとIntelij:チェンジリストのファイルに対してのみ分析を実行することは可能ですか?

分類Dev

GNU libc.soは、共有オブジェクトとスタンドアロン実行可能ファイルの両方ですか?

分類Dev

Gitで複数のプロジェクトのファイルを監視することは可能ですか?

分類Dev

実行可能ファイルは実行時に共有オブジェクトをどこで検索しますか?

分類Dev

jqを使用してテキストファイルの内容をJSON配列オブジェクトに動的に挿入することは可能ですか?

分類Dev

プロジェクトファイルをダウングレードすることは可能ですか?

分類Dev

Googleドライブファイルへのパーマリンクを取得することは可能ですか?

Related 関連記事

  1. 1

    XMLファイルから複数のオブジェクトを作成することは可能ですか?

  2. 2

    この方法でファイルオブジェクトを送信することは可能ですか?

  3. 3

    Javaプロジェクトを実行可能ファイルにすることは可能ですか?

  4. 4

    複数のファイルで同じオブジェクトを使用することは可能ですか?

  5. 5

    C ++でオブジェクトのインクルードファイルの名前を取得することは可能ですか?

  6. 6

    多くの非メインクラスのオブジェクトを、メインの実行可能Javaファイル以外のファイルに宣言できますか?もしそうなら、どのように:それはクラスなどになることができますか?

  7. 7

    永続オブジェクトをファイルシステムに保存することは可能ですか

  8. 8

    送信から実際のリンクファイルを取得することは可能ですか?

  9. 9

    exeファイルをlibファイルとして別のプロジェクトにリンクすることは可能ですか?

  10. 10

    so(共有オブジェクト)ファイルからすべてのコードを回復することは可能ですか?

  11. 11

    ファイルとその実行可能ファイルの間に永続的なリンクを確立することは可能ですか?

  12. 12

    ファイルとその実行可能ファイルの間に永続的なリンクを確立することは可能ですか?

  13. 13

    ジオメトリデータをシェープファイルからQGISからCSVにエクスポートすることは可能ですか?

  14. 14

    共有オブジェクトファイルと再配置可能ファイルの違いは何ですか?

  15. 15

    メインファイルがあるディレクトリの外からPythonファイルをインポートすることは可能ですか?

  16. 16

    mmapファイルをbytesオブジェクトとして扱うことは可能ですか?

  17. 17

    オクテットストリームからファイル名を抽出することは可能ですか?

  18. 18

    オクテットストリームからファイル名を抽出することは可能ですか?

  19. 19

    実行可能なスレッドの宣言内でインタラクティブシェルにファイルを書き込むことは可能ですか?

  20. 20

    ディレクトリCのファイルからディレクトリBにtarアーカイブを作成するディレクトリAでtarコマンドを実行することは可能ですか?

  21. 21

    スプリングブートで構成可能な再試行可能なmaxAttemptsとapplication.propertiesファイルからのバックオフを作成する方法

  22. 22

    Pythonオブジェクト(特にsklearnモデル)をメモリマップファイルに保存することは可能ですか?

  23. 23

    SonarlintとIntelij:チェンジリストのファイルに対してのみ分析を実行することは可能ですか?

  24. 24

    GNU libc.soは、共有オブジェクトとスタンドアロン実行可能ファイルの両方ですか?

  25. 25

    Gitで複数のプロジェクトのファイルを監視することは可能ですか?

  26. 26

    実行可能ファイルは実行時に共有オブジェクトをどこで検索しますか?

  27. 27

    jqを使用してテキストファイルの内容をJSON配列オブジェクトに動的に挿入することは可能ですか?

  28. 28

    プロジェクトファイルをダウングレードすることは可能ですか?

  29. 29

    Googleドライブファイルへのパーマリンクを取得することは可能ですか?

ホットタグ

アーカイブ