私は良い解決策を見つけようとしているという面白い状況があります。私たちは、マルチコアMIPSベアメタル(カーネルなし)で動作するコードを持っています。アップグレードが必要な第三者のコードと統合する必要があります。 私は第三者コードをPICとしてコンパイルし、このコードをダウンロードするときにコード/データシンボルのGOTを変更することを考えていました(コードが存在する場所を制御できます)。また、新しいPLT/GOTエントリがないように、第三者コードへのインタフェースが変更されないと仮定します。 これは動作しますか?他にどんなことを考えなければならないのですか?動的ローダーをフィックスアップ共有ライブラリのオフセットにエミュレートする
答えて
正解は「動的リンカー/ローダーを埋め込む」よりも長いですか?あなたの問題は、ld.soなどが解決した問題と同じように見えます。動的リンカ/ローダが考慮する必要があるすべてのことを記述することは、John LevineのLinkers and Loadersなどの書籍のトピックです。
私は自分自身の埋め込みローダーを書くより簡単なものを探しています。上記の本を読んだことがあります。私が問題を解決し終えると、やったことを投稿します。ありがとう! – vamsi
Linux/Unix binutils objcopy
はあなたが探しているものになるでしょうか?実行時にランダムに順番にそれらを動的にロードするのではなく、すべてのバイナリを一度にビルドしていると仮定すると、それはうまくいくと思います。
もちろん、GOTを修正する必要がある場合は、なぜそれを行うことができないのかわかりません。何かを書くのは難しいことではありません。しかし、objcopyはすでに書かれており、かなりバイナリ/実行可能な "厄介な"ことができます(私はこれを使って、PCのBIOS ROMを含む様々なシステム用のboot-romを作っています)そのアイデアといっしょに、私は誰かのメイクファイルを取ったのと同じように、その中にobjcopyを持っていました - ちょうど何かが間違っていたときのROMの作り方を理解しました
- 1. デフォルト以外のローダーの共有ライブラリを確認する
- 2. 静的クラスメンバーの共有ライブラリ
- 3. ブースト - 「静的」vs「共有」ライブラリ
- 4. * nixにソケット共有ライブラリを自動的にリンク
- 5. ビルド中に静的ライブラリを共有ライブラリにリンクしますか?
- 6. 静的ライブラリを共有ライブラリに変換しますか?
- 7. CMake:静的ライブラリを使用する共有ライブラリ
- 8. 共有ライブラリと静的ライブラリの技術的な違いは?
- 9. 共有ライブラリApp.Config
- 10. Websphere共有ライブラリ
- 11. オプションの共有ライブラリ
- 12. 共有ライブラリのファイルサイズ
- 13. 共有ライブラリのMakefile?
- 14. 共有ライブラリをスタティックライブラリに変換する
- 15. 共有ライブラリ、ライブラリ依存性
- 16. 共有ライブラリのpstack(c/C++)。破損した共有ライブラリ
- 17. SSRS動的共有データソース
- 18. 共有ライブラリ内の静的ライブラリのAndroid NDKコールAPI
- 19. 静的ライブラリをテストするか、プロジェクト間で共有する
- 20. MinGWとの静的/動的/共有リンク
- 21. ロードは、他の共有ライブラリに依存LIBSを共有
- 22. LLVMの静的ライブラリと共有ライブラリの両方をビルドするlibC++ 3.3
- 23. 共有ライブラリ用語
- 24. Mavenと共有ライブラリ
- 25. Java EE共有ライブラリ?
- 26. Cmake:リンク共有ライブラリ
- 27. NLog、Elmah +共有ライブラリ
- 28. 共有ライブラリの例外をブーストする
- 29. Linuxの共有ライブラリをデバッグする
- 30. Androidでシステム共有ライブラリにアクセスする
私は私はこれが非常にローカライズされた質問の非常に深いところで泳いでいると思うのですが、私は単純にそれを落とすことはできません(実際には代わりに投票しました)。アイデアと好奇心が私を(そして明らかに他の人たちも)私に授けました。がんばろう! – WhozCraig
@vamsi質問は私には少し不明です。 サードパーティ(アップグレード)の新しいバージョンを読み込むたびにGOTを変更することを意味しますか?自分でローダーを書く方法を尋ねていますか? – selalerer
@selalererはい、私は新しいサードパーティバージョンをロードするたびにGOTを変更することを意味しました。はい、本質的には、私は軽量のローダーです。私は完全なledgedローダーを実装したくない。私がしたいのは、GOT/PLTテーブルをフィックスアップして新しいコードをアクティブにすることだけです。 – vamsi