Я знаю, что обычно мы не хотим иметь статическую ссылку на libc по соображениям совместимости, но у меня есть приложение, которое будет работать внутри Docker, и использование LD_PRELOAD получит выполнение для подключения функции libc (для целей анализа).
Когда я создаю это, я получаю динамически связанную, поэтому.
# arm-linux-gnueabi-gcc -fPIC -shared -o libpreload-arm.so libpreload.c -ldl
# arm-linux-gnueabi-readelf -a libpreload-arm.so | grep Shared
Type: DYN (Shared object file)
0x00000001 (NEEDED) Shared library: [libc.so.6]
Примечание. Я кросс-компилирую для ARM, поскольку среда в моем chroot является системой ARM,и qemu-user-arm запустит все это.
Я копирую необходимые библиотеки в chroot, как показано ниже:
# cp libpreload-arm.so /usr/local/lib/libpreload.so
# cp `arm-linux-gnueabi-gcc -print-file-name=libc.so.6` /tmp/chroot/lib/
# arm-linux-gnueabi-readelf -a /tmp/chroot/lib/libc.so.6 | grep Shared
Type: DYN (Shared object file)
0x00000001 (NEEDED) Shared library: [ld-linux.so.3]
# cp `arm-linux-gnueabi-gcc -print-file-name=ld-linux.so.3` /tmp/chroot/lib/
Запуск этого, однако, обеспечивает такой результат:
# chroot /tmp/chroot /bin/sh -c "env -i HOME=/root PWD=/ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin LD_PRELOAD=/usr/local/lib/libpreload.so sh"
/bin/sh: '/lib/libc.so.6' library contains unsupported TLS
/bin/sh: '/lib/libc.so.6' library contains unsupported TLS
/bin/sh: can't load library 'libc.so.6'
Кажется, что-то несовместимо с моей средой бега, но я не могу понять, что именно. Обратите внимание, что я предпочел бы не создавать вручную всю папку / tmp / chroot, поскольку я копирую в систему, которую я хочу максимально эмулировать, в эту папку.
Таким образом, кажется, что мояОпции - это один из следующих вариантов - ни один из которых я не могу заставить работать: 1) Создайте libpreload-arm.so без динамических ссылок, скопируйте его и запустите 2) Создайте libpreload-arm.so с динамическим либкингом,скопируйте его и связанные библиотеки, и рассмотрите несовместимости
Любая поддержка будет принята с благодарностью.