linux - ऑपर - लिनक्स फाइल सिस्टम




क्या लिनक्स पर वर्तमान rpath का निरीक्षण करने का एक तरीका है? (3)

आप भी उपयोग कर सकते हैं:

chrpath -l binary-or-library

मुझे पता है कि readelf -d <elf> | grep RPATH का उपयोग करना संभव है readelf -d <elf> | grep RPATH शेल से दिए गए बाइनरी का निरीक्षण करने के लिए, लेकिन क्या किसी प्रक्रिया के भीतर ऐसा करना संभव है?

कुछ इस तरह (मेरी पूरी तरह से सिस्टम कॉल):

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

मैं हमारे कोडबेस में कुछ संदिग्ध SO लिंकिंग मुद्दों का निदान करने की कोशिश कर रहा हूं, और यदि संभव हो तो RPATH का निरीक्षण करना चाहता हूं (मुझे नहीं बल्कि एक बाहरी स्क्रिप्ट को स्पॉन करना होगा)।


रिकॉर्ड के लिए, यहां कुछ कमांड दिए गए हैं जो rpath हैडर को rpath

objdump -x binary-or-library |grep RPATH

शायद यह करने के लिए एक और भी बेहतर तरीका निम्नलिखित है:

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

दूसरी कमान भी rpath द्वारा पीछा अन्य पुस्तकालयों पर प्रत्यक्ष निर्भरता सूचीबद्ध करता है।


#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