2012-05-04 18 views
2

glibcを修正したい。だから私はそれのバージョンをダウンロードし、コードにいくつかの変更を加えました。たとえば、私はmemsetに変更を加えました。しかし、コンパイルによって生成された.soファイル(LD_PRELOADを使用)をLD_PRELOADを実行しないときと比較して使用すると、私は違いはありません。 memsetはそれと同じように動作します。どうしてこんなことに?コンパイラがmemsetをインライン化していて、共有オブジェクトから何も使用していないのでしょうか?私はこれを理解していない。私はprintfに変更を加えることさえできましたが、それでも何も変わりません。どうしてこんなことに。 glibc(テスト目的)を変更すると、私は変更が見えますか?glibcを変更しても何も起こらない

また、その機能の始めにprintf("pthread_create")を導入してpthread_create(およびLD_PRELOAded libpthread.so)を変更しようとすると、ちょうどセグメンテーションフォルトが発生します。ここで何が起こっているのですか? glibcのソースを変更した後にlibc.soの違いを調べても、生成されるバージョンに違いはありません。ここで何が起きてるの。これは私をナットにしている!

+0

私はついにglibcを静的にリンクすることで落ちました!ピー! – pythonic

答えて

4

GCCにはmemset()printf()を含むseveral functionsの組み込みバージョンが用意されています。 glibcのこれらの関数の実装にはリンクしていません。

この動作を禁止するには、​​コンパイラオプションを渡してみてください。

関連する問題