هل هناك طريقة لتفقد RPAT الحالي على 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);

أحاول تشخيص بعض المشتبه بهم ، لذا ربط المشكلات في قاعدة كودنا ، وأرغب في فحص RPAT بهذه الطريقة إن أمكن (لا أضطر إلى تفرخ نصًا خارجيًا).

هل كانت مفيدة؟

المحلول

#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