هل هناك طريقة لتفقد RPAT الحالي على Linux؟
سؤال
أدرك أنه من الممكن استخدام 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
لا تنتمي إلى StackOverflow