#include #include #include #include #include static int cb(struct dl_phdr_info *pinfo, size_t sz, void *cba) { Elf_Phdr phdr; if (pinfo->dlpi_phnum > 0) phdr = *pinfo->dlpi_phdr; return (0); } static void * callback_looper(void *arg __unused) { for (;;) (void)dl_iterate_phdr(cb, NULL); } int main(int argc, char **argv) { void *handle; pthread_t t; if (pthread_create(&t, NULL, callback_looper, NULL) != 0) err(1, "pthread_create"); for (;;) { handle = dlopen("/lib/libutil.so.9", RTLD_NOW); if (handle == NULL) errx(1, "dlopen(libutil.so): %s", dlerror()); if (dlclose(handle) != 0) errx(1, "dlclose(libutil.so): %s", dlerror()); } }