ELF バイナリをチェックするためにelfutils
呼び出されるプログラムを含むソフトウェア パッケージがあります ( C の場合と同様 - 名前の由来)。eu-elflint
lint
好奇心のために、このツールを使用して独自の共有ライブラリをチェックしたところ、次のような多くの問題が見つかりました。
eu-elflint libUtils.so
section [ 2] '.dynsym': _DYNAMIC symbol size 0 does not match dynamic segment size 248
section [ 2] '.dynsym': _GLOBAL_OFFSET_TABLE_ symbol size 0 does not match .got.plt section size 3076
section [ 8] '.rel.plt': relocation 0: offset out of bounds
section [ 8] '.rel.plt': relocation 1: offset out of bounds
...
section [ 8] '.rel.plt': relocation 765: offset out of bounds
クロスチェックとして、以下のソースコードから非常に簡単な共有ライブラリを構築しました
int foo(int a) {
return a + 1;
}
// gcc -shared -fPIC -o libfoo.so foo.c
そして再挑戦…
eu-elflint libfoo.so
section [ 9] '.rel.plt': relocation 0: offset out of bounds
section [ 9] '.rel.plt': relocation 1: offset out of bounds
section [23] '.comment' has wrong flags: expected none, is MERGE|STRINGS
section [25] '.symtab': _GLOBAL_OFFSET_TABLE_ symbol size 0 does not match .got.plt section size 20
section [25] '.symtab': _DYNAMIC symbol size 0 does not match dynamic segment size 200
ご覧のとおり、些細な例でも多くの問題が示されています。
ところで:私はgcc v4.4.1でUbuntu-Karmic-32bitを使用しています
ところで:... gcc v4.2.4を使用したDebian-Lenny-64bitでも同じことが起こります
これは私が心配すべきことですか?