我对.dynamic节中的DT_USED条目感到好奇。但是,我只能找到两个描述此条目的代码示例。
1。
#define DT_USED 0x7ffffffe /* ignored - same as needed */
在https://github.com/switchbrew/switch-tools/blob/master/src/elf_common.h
中2。
case DT_USED:
case DT_INIT_ARRAY:
case DT_FINI_ARRAY:
if (do_dynamic)
{
if (entry->d_tag == DT_USED
&& VALID_DYNAMIC_NAME (entry->d_un.d_val))
{
char *name = GET_DYNAMIC_NAME (entry->d_un.d_val);
if (*name)
{
printf (_("Not needed object: [%s]\n"), name);
break;
}
}
print_vma (entry->d_un.d_val, PREFIX_HEX);
putchar ('\n');
}
break;
在http://web.mit.edu/freebsd/head/contrib/binutils/binutils/readelf.c
中我想知道,“不需要的对象”是什么意思?这是否意味着不需要此处列出的文件名?
答案 0 :(得分:1)
通常,在查看Solaris动态链接器功能时,可以在公共Illumos源(曾经从OpenSolaris派生)中找到更多信息。在这种情况下,似乎DT_USED
始终被视为DT_NEEDED
,因此它们本质上是相同的。其中一个头文件usr/src/uts/common/sys/link.h
也包含以下内容:
/*
* DT_* entries between DT_HIPROC and DT_LOPROC are reserved for processor
* specific semantics.
*
* DT_* encoding rules apply to all tag values larger than DT_LOPROC.
*/
#define DT_LOPROC 0x70000000 /* processor specific range */
#define DT_AUXILIARY 0x7ffffffd /* shared library auxiliary name */
#define DT_USED 0x7ffffffe /* ignored - same as needed */
#define DT_FILTER 0x7fffffff /* shared library filter name */
#define DT_HIPROC 0x7fffffff
这里可能已经计划了一些东西,但是似乎没有实现(或者曾经是,现在不再)。