2012-11-16 5 views
11

私は良い解決策を見つけようとしているという面白い状況があります。私たちは、マルチコアMIPSベアメタル(カーネルなし)で動作するコードを持っています。アップグレードが必要な第三者のコードと統合する必要があります。 私は第三者コードをPICとしてコンパイルし、このコードをダウンロードするときにコード/データシンボルのGOTを変更することを考えていました(コードが存在する場所を制御できます)。また、新しいPLT/GOTエントリがないように、第三者コードへのインタフェースが変更されないと仮定します。 これは動作しますか?他にどんなことを考えなければならないのですか?動的ローダーをフィックスアップ共有ライブラリのオフセットにエミュレートする

+1

私は私はこれが非常にローカライズされた質問の非常に深いところで泳いでいると思うのですが、私は単純にそれを落とすことはできません(実際には代わりに投票しました)。アイデアと好奇心が私を(そして明らかに他の人たちも)私に授けました。がんばろう! – WhozCraig

+0

@vamsi質問は私には少し不明です。 サードパーティ(アップグレード)の新しいバージョンを読み込むたびにGOTを変更することを意味しますか?自分でローダーを書く方法を尋ねていますか? – selalerer

+0

@selalererはい、私は新しいサードパーティバージョンをロードするたびにGOTを変更することを意味しました。はい、本質的には、私は軽量のローダーです。私は完全なledgedローダーを実装したくない。私がしたいのは、GOT/PLTテーブルをフィックスアップして新しいコードをアクティブにすることだけです。 – vamsi

答えて

1

正解は「動的リンカー/ローダーを埋め込む」よりも長いですか?あなたの問題は、ld.soなどが解決した問題と同じように見えます。動的リンカ/ローダが考慮する必要があるすべてのことを記述することは、John LevineのLinkers and Loadersなどの書籍のトピックです。

+1

私は自分自身の埋め込みローダーを書くより簡単なものを探しています。上記の本を読んだことがあります。私が問題を解決し終えると、やったことを投稿します。ありがとう! – vamsi

0

Linux/Unix binutils objcopyはあなたが探しているものになるでしょうか?実行時にランダムに順番にそれらを動的にロードするのではなく、すべてのバイナリを一度にビルドしていると仮定すると、それはうまくいくと思います。

もちろん、GOTを修正する必要がある場合は、なぜそれを行うことができないのかわかりません。何かを書くのは難しいことではありません。しかし、objcopyはすでに書かれており、かなりバイナリ/実行可能な "厄介な"ことができます(私はこれを使って、PCのBIOS ROMを含む様々なシステム用のboot-romを作っています)そのアイデアといっしょに、私は誰かのメイクファイルを取ったのと同じように、その中にobjcopyを持っていました - ちょうど何かが間違っていたときのROMの作り方を理解しました

関連する問題