Есть ли способ проверить текущее рапуску на Linux?

StackOverflow https://stackoverflow.com/questions/2836330

  •  26-09-2019
  •  | 
  •  

Вопрос

Я знаю, что можно использовать readelf -d <elf> | grep RPATH Чтобы проверить данный двоичный двоичный от оболочки, но возможно ли сделать это в процессе?

Что-то вроде (мой полностью составленный системный звонок):

  /* get a copy of current rpath into buffer */
  sys_get_current_rpath(&buffer);

Я пытаюсь диагностировать некоторые подозрительные, поэтому связывающие проблемы в нашей кодовой базе, и хотели бы осмотреть тьму так, если это возможно (я бы скорее не придется вызывать внешний скрипт).

Это было полезно?

Решение

#include <stdio.h>
#include <elf.h>
#include <link.h>

int main()
{
  const ElfW(Dyn) *dyn = _DYNAMIC;
  const ElfW(Dyn) *rpath = NULL;
  const char *strtab = NULL;
  for (; dyn->d_tag != DT_NULL; ++dyn) {
    if (dyn->d_tag == DT_RPATH) {
      rpath = dyn;
    } else if (dyn->d_tag == DT_STRTAB) {
      strtab = (const char *)dyn->d_un.d_val;
    }
  }

  if (strtab != NULL && rpath != NULL) {
    printf("RPATH: %s\n", strtab + rpath->d_un.d_val);
  }
  return 0;
}

Другие советы

Для записи, вот несколько команд, которые покажут rpath заголовок

objdump -x binary-or-library |grep RPATH

Может быть, еще лучший способ сделать это следующее:

readelf -d binary-or-library |head -20

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

Вы также можете использовать:

chrpath -l binary-or-library
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top