2011-07-27 12 views
1

私は自分自身のELF .oファイルを作成しようとしています。他のストリップのメモリを指し示すメモリのストリップを書きたいと思います。私はすべての名前を取り除く与えたくないので、私はちょうど彼らがしているセクションの開始の相対的な位置を追跡するELFはローカルセクションに対して再配置します

だから私は、の形で再配置エントリを作成します。

000000000a50 00090000000b R_X86_64_32S 0000000000000000 .section + a70

ここでa50では、64ビットのグローバルポインタを使用して.section + a70のオブジェクトを参照します。セクションを使用して定義されています

9: 0000000000000000 0 SECTION LOCAL DEFAULT 6

を以前の出力がreadelfがあるから、それは実際に私はちょうどセグメンテーション違反LD、を介してこれを引っ張るまで、すべてが...罰金であることをふり。

私がWEAKタイプを使用すると、それが動作することがわかりました...しかし、その場合は、すべてのリンクされた.oファイル内の最初のセクションシンボルがすべての再配置のターゲットとして検出されるようです。私は本当にそれがローカルになるようにしたいので、ローカルでなければなりません。

これまでの代替案は、このようなオブジェクトを持つ各セクションの冒頭にOBJECTシンボルを作成することですが、それはちょっとばかりです...私は間違ったことをしていますか、LDにバグがありますか?

答えて

1

明らかに、私はシンボルテーブルのsh_infoフィールドに1だけ離れていました。これは私が私の地元のシンボルがで終わったことを識別助けた

 

    gold: internal error in do_layout, at ../../gold/object.cc:1493 

または

 

    gold: error: invalid STB_LOCAL symbol in external symbols 
    gold: error: unsupported symbol binding 0 
    gold: error: invalid STB_LOCAL symbol in external symbols 
    gold: error: unsupported symbol binding 0 
    gold: error: test.o: multiple definition of '' 
    gold: test.o: previous definition here 

を:私はセグメンテーションフォルトも与えないことによって、もう少し有益であるGOLDの助けを借りてそれを考え出しました「外部シンボル」(sh_infoに格納された「第1の非ローカルシンボルのインデックス」の後の意味)

関連する問題