私にとって、あなたは新しいlibcの変種への道全体を費やさなかったようです。私は次のようでした
:
ldd example
linux-vdso.so.1 (0x00007ffe9c087000)
libstdc++.so.6 => /opt/linux-gnu_6.1.0/lib64/libstdc++.so.6 (0x00007f0cef872000)
libm.so.6 => /lib64/libm.so.6 (0x00007f0cef56f000)
libgcc_s.so.1 => /opt/linux-gnu_6.1.0/lib64/libgcc_s.so.1 (0x00007f0cef359000)
libc.so.6 => /lib64/libc.so.6 (0x00007f0ceef98000)
/lib64/ld-linux-x86-64.so.2 (0x000055ca3cb92000)
LD_PRELOAD=/tmp/bug_libc.so ldd example
linux-vdso.so.1 (0x00007ffc2cff8000)
/tmp/bug_libc.so (0x00007f56a1358000)
libstdc++.so.6 => /opt/linux-gnu_6.1.0/lib64/libstdc++.so.6 (0x00007f56a0f9a000)
libm.so.6 => /lib64/libm.so.6 (0x00007f56a0c98000)
libgcc_s.so.1 => /opt/linux-gnu_6.1.0/lib64/libgcc_s.so.1 (0x00007f56a0a82000)
/lib64/ld-linux-x86-64.so.2 (0x00005605c8a7a000)
私は非有効libcのAと交換した場合は、別のエラーメッセージが表示されました。
LD_PRELOAD=/tmp/bug_libc.so2 ldd go
ERROR: ld.so: object '/tmp/bug_libc.so2' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
ERROR: ld.so: object '/tmp/bug_libc.so2' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.
linux-vdso.so.1 (0x00007ffedcde4000)
libstdc++.so.6 => /opt/linux-gnu_6.1.0/lib64/libstdc++.so.6 (0x00007f3ae2188000)
libm.so.6 => /lib64/libm.so.6 (0x00007f3ae1e85000)
libgcc_s.so.1 => /opt/linux-gnu_6.1.0/lib64/libgcc_s.so.1 (0x00007f3ae1c6f000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3ae18ae000)
/lib64/ld-linux-x86-64.so.2 (0x000055df54aae000)
代替libcファイルにアクセスすると、別の問題が発生する場合があります。 ファイルのアクセスフラグをチェックし、SELinuxまたはAppArmorまたは他の保護があなたの環境でlibcのロードを停止しているかどうかも確認してください。 libcの置き換えはセキュリティホールを開くので、SELinuxの候補は& Co!
そして常にldd
で確認してください。おそらくあなたの新しいlibcには、あなたのシステム上で見つからない他のlibsのいくつかの(古い)バリエーションが必要かもしれません。 Normaly libcは他のlibsを必要としませんでしたが、あなたはどのゲームをプレイしているのか分かりません。何でも:lddは、ライブラリのロード段階で起こっていることに、より詳細な答えを与えます。
EDIT:セグメンテーション違反
あなたがセグメンテーションフォルトを取得する場合は、あなたは一般的に互換性のないヘッダファイルを使用してアプリケーションをコンパイルしています。使用するlibcバージョンに付属のヘッダでコンパイルする必要があります。システムlibcのシステムヘッダに対してコンパイルし、互換性のないバージョンのプリコンパイル済みlibcを実行すると、間違ったデータ構造にアクセスすることによってあらゆる種類のメモリエラーが発生します。
libcは通常動的にリンクされているので、OSのlibcを使いたいものに置き換えることはすべきことです。 – m0skit0
@ m0skit0:あなたのシステム全体のlibcを本当に置き換えるならば、新しいものがあなたのシステム上のいくつかのプログラムを壊したならば、これがあなたのシステムでやった最後のことだと思うかもしれません...幸運:-) – Klaus
'LD_LIBRARY_PATH'環境変数を設定しようとしていますか?バイナリのソースコードを再コンパイルできますか?あなたの質問を編集して改善することを検討してください。 –