Рассмотрим программу, как:Принуждение ЛД разрешить слабые ссылки на время Л.Д.
#include <stdio.h>
void foo() __attribute__((__weak__));
int main()
{
printf("%p\n", (void *)foo);
if (foo) foo();
}
Если скомпилирован как обычный, не-PIE динамической связанный исполняемый файл, то несуществование foo
решается на ld
время, и даже если LD_PRELOAD
используется для определения foo
, он не будет виден. С другой стороны, если программа скомпилирована как PIE, на выходе выводятся слабые ссылки на динамические символы, а LD_PRELOAD
может сделать символ foo
видимым.
Есть ли способ заставить поведение, отличное от PIE (разрешить несуществование символа с слабой ссылкой в ld time, а не во время выполнения) для исполняемых файлов PIE?