Ограничение системных библиотек, которые могут использовать программы

Не используйте этот Boot-repair снова. Вы установили grub для неправильной арки. /boot/grub/i386-pc/core.img, но ваш grub-entry говорит Linux Mint 17.2 Cinnamon 64-bit, 3.16.0-38-generic Возьмите носитель, который вы установили в свою систему. Это должен быть тот же Arch. Вам нужно создать /mnt/dev и /mnt/sys /mnt/run и /mnt/proc /mnt/etc/resolv.confв Live-сессии. Следующие шаги

  1. sudo mount /dev/sda5 /mnt

  2. sudo mount --bind /dev /mnt/dev

  3. sudo mount --bind /sys /mnt/sys
  4. sudo mount --bind /proc /mnt/proc
  5. sudo mount --bind /run /mnt/run
  6. sudo mount -o bind /etc/resolv. conf /mnt/etc/resolv.conf

sudo chroot /mnt /bin/bash Теперь вы находитесь в своей системе. sudo apt-get clean Чтобы освободить место на жестком диске. df -h;df -i покажет вам, сколько места и сколько inodes свободно.

Это уничтожает все неправильные grub-пакеты. dpkg -l | grep grub | awk '{print $2}' | xargs sudo apt-get install --reinstall -y Attantion apt install сразу без всякого запроса. sudo apt-get install --reinstall linux-image-3.13.0-24-generic linux-image-extra-3.13. 0-24-generic

2
09.05.2016, 03:01
2 ответа

Учитывая, что программа запоминает, использовать ли библиотеку между запусками, она должна хранить эту информацию где-то в конфигурационном файле. Как предложил Фахим Митха, лучше всего найти этот конфигурационный файл и создать его перед запуском программы.

Запуск программы с помощью strace должен показать вам, какие файлы она загружает:

strace -o myprogram.strace -e open,access myprogram

Если вам нужно изменить работу программы, то в этой ситуации потребуется LD_PRELOAD. Вам нужно будет найти, какой вызов библиотеки (не системный вызов!) делает программа, чтобы определить, загружать ли файл. В этом может помочь команда ltrace. Например, если программа вызывает dlopen, переопределите функцию dlopen, чтобы она возвращала ошибку, если программа пытается открыть эту конкретную библиотеку. Предупреждение: непроверенный код.

#define _GNU_SOURCE
#include <dlfcn.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int dlopen(const char *filename, int flags) {
    int (*original_dlopen)(const char *, int) = dlsym(RTLD_NEXT, "dlopen");
    if (!strcmp(filename, PATH_TO_HIDE)) {
        return NULL;
    }
    return original_fopen(path, mode);
}

Скомпилируйте с

gcc -DPATH_TO_HIDE='"libfoo.so"' -O -Wall -fPIC -shared -o hide_libfoo.so hide_library.c -dl

Запустите программу следующим образом:

LD_PRELOAD=./hide_libfoo.so ./myprogram
2
27.01.2020, 21:59

Вы можете запустить программу в chroot , что заставит загрузчик использовать только библиотеки, которые вы скопировали в ограниченную среду.

Дополнительная литература:

2
27.01.2020, 21:59

Теги

Похожие вопросы