Как применить LD_PRELOAD только к целевой программе?

Я пытаюсь отладить повреждение кучи (используя отладчик QIRA); это работает только с Malloc Дуга Ли.

Я попытался сделать следующее:

LD_PRELOAD=./malloc.so qira ./program $(cat shfree5)

Я получаю следующую ошибку:

ОШИБКА: ld.so: объект './malloc.so' из LD_PRELOAD не может быть предварительно загружен (неправильный класс ELF: ELFCLASS32): игнорируется.

это происходит потому, что загрузчик пытается связать x86 malloc.so с x64 qira.

Я хочу применить LD_PRELOAD только к ./program, а не к qira; Я пробовал с помощью команды env, но не могу заставить ее работать.

Заранее спасибо!


person afuentes    schedule 08.02.2021    source источник
comment
Я не могу найти подробную документацию по qira, но вам нужно запустить qira, установить там переменную среды, а затем запустить свою программу.   -  person Barmar    schedule 08.02.2021
comment
К сожалению, обработка всех переменных среды LD_* в Linux с треском проваливается в смешанной 32/64-битной среде. См. stackoverflow.com/questions/36849507/ для некоторых вещей, которые могут помочь.   -  person Andrew Henle    schedule 08.02.2021
comment
env LD_PRELOAD=./malloc.so ./program ... должен работать, если у вас есть реализация env, которая работает под qira.   -  person Peter Cordes    schedule 09.02.2021
comment
Я пытаюсь отладить повреждение кучи — вы, скорее всего, получите намного больше, используя Address Sanitizer вместо LD_PRELOADing debug malloc.   -  person Employed Russian    schedule 09.02.2021


Ответы (1)


Похоже, вы можете установить QEMU_SET_ENV=LD_PRELOAD=./malloc.so в среде, чтобы повлиять на процесс.

Я отмечу, что вы можете аналогичным образом сбросить переменные среды для цели, установив QEMU_UNSET_ENV=FOO,BAR.

person Hasturkun    schedule 08.02.2021
comment
@Joshua: Еще немного чего? Qira использует QEMU. Я протестировал его, запустив env с поддельным файлом .so, который выдал мне ошибку из ld.so, показывая, что он использовал это установленное значение. - person Hasturkun; 08.02.2021
comment
Я добавил слово «окружающая среда» к своему ответу, так как это, по-видимому, было непонятно. - person Hasturkun; 08.02.2021
comment
Большое спасибо! Кажется, это работает, теперь динамически связано! - person afuentes; 08.02.2021