質問
?私はシェルから与えられたバイナリを検査するreadelf -d <elf> | grep RPATH
を使用することが可能であることを承知しているが、それはプロセス内でこれを行うことが可能です。
何か(私の完全に構成されたシステムコール):
/* get a copy of current rpath into buffer */
sys_get_current_rpath(&buffer);
私は、私たちのコードベースで問題点を結ぶいくつかの容疑者SOを診断しようとしている、と(私はむしろ外部スクリプトを起動する必要はないと思います)可能であれば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
ヘッダーを表示するコマンドのカップルがあります。
objdump -x binary-or-library |grep RPATH
たぶん、それを行うためのより良い方法は次の通りである:
readelf -d binary-or-library |head -20
2番目のコマンドはまたrpath
続く他のライブラリに直接依存関係を示しています。
また、使用することができます:
chrpath -l binary-or-library
所属していません StackOverflow