2012-03-05 8 views
1

私はコンパイルした静的ライブラリを持っています。また、実行可能ファイルを作成すると、ライブラリで作成した特定の関数を常に固定絶対アドレスに配置します。シンボル配置の絶対アドレスを指定する

特に、私の静的ライブラリはx86アセンブリルーチンのセットであり、ELFバイナリがロードされたときに常に固定仮想アドレスに配置されるルーチン(_start_execと呼ばれる)を使用します。私は--defsymを見てみましたが、私はそれが私が望んでいたとは思いません。私は、実行可能ファイルの開始点を混乱させたくありません。リンク先のすべての実行可能ファイル内の固定仮想アドレスに常にある特定の命令シーケンスが必要です。

+0

おそらく、ライブラリファイル 'libfoo.a'だけではできません。本当に必要な場合は、独自のリンク手順を定義する必要があります。 ( 'ld'は実際にはスクリプトが可能です。そしてあなたの奇妙な要件を動機づけて説明する必要があります(それを避ける方法があるかもしれません)。 –

+0

あなたは 'ld'スクリプトの使用法、例などについて私に指摘できますか?私の要件は設定されています。私はexecと同様の操作を行うシステムコールを呼び出し、新しいメモリイメージがロードされたときに命令ポインタが常に正しい命令にプリセットされるように、コードのトランポリンセグメントからsys呼び出しを呼び出す必要があります。その周りの1つの方法は、sys呼び出しで%eipレジスタを変更することですが、それは私のモデルには適合しません。 – Chris

答えて

1

コメントで述べたように、おそらくldスクリプトを作成する必要があります。あなたはABSOLUTE(expr)ADDR(section)でやりたいスクリプトldlinker scripts

1

のbinutilsにのドキュメントを参照してくださいすることができます。 ldドキュメントから:

SECTIONS { ... 
     .output1 : 
     { 
     start_of_output_1 = ABSOLUTE(.); 
     ... 
     } 
     .output : 
     { 
     symbol_1 = ADDR(.output1); 
     symbol_2 = start_of_output_1; 
     } 
    ... } 

あなたはあなたの正確なニーズに合わせて上記のスクリプトを変更することができます。