From db7cb6d09b735c84c1d0764eb4807c3b136c374d Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 7 Sep 2015 23:14:25 -0600 Subject: Disable the nss ldap module for our process (include bindings for libdl) --- dl/dl_gnu.go | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 dl/dl_gnu.go (limited to 'dl/dl_gnu.go') diff --git a/dl/dl_gnu.go b/dl/dl_gnu.go new file mode 100644 index 0000000..c7c409b --- /dev/null +++ b/dl/dl_gnu.go @@ -0,0 +1,58 @@ +package dl + +import "unsafe" + +//#define _GNU_SOURCE +//#include +//#include +//#include +//const uintptr_t rtld_next = (uintptr_t)RTLD_NEXT; +//const uintptr_t rtld_default = (uintptr_t)RTLD_DEFAULT; +import "C" + +const ( + RTLD_NOLOAD Flag = C.RTLD_NOLOAD + RTLD_NODELETE Flag = C.RTLD_NODELETE + RTLD_DEEPBIND Flag = C.RTLD_DEEPBIND +) + +// These are kinda weird in that they aren't required by the standard, +// but they are reserved by the standard (see the documentation for +// `dlsym(3)`). On glibc, it takes _GNU_SOURCE to get them. +// +// There are two special pseudo-handles that may be specified +// in handle: +var ( + RTLD_DEFAULT Handle = Handle{unsafe.Pointer(uintptr(C.rtld_default))} + // Find the first occurrence of the desired symbol using + // the default shared object search order. The search will + // include global symbols in the executable and its + // dependencies, as well as symbols in shared objects that + // were dynamically loaded with the RTLD_GLOBAL flag. + RTLD_NEXT Handle = Handle{unsafe.Pointer(uintptr(C.rtld_next))} + // Find the next occurrence of the desired symbol in the + // search order after the current object. This allows one + // to provide a wrapper around a function in another shared + // object, so that, for example, the definition of a + // function in a preloaded shared object (see LD_PRELOAD in + // ld.so(8)) can find and invoke the "real" function + // provided in another shared object (or for that matter, + // the "next" definition of the function in cases where + // there are multiple layers of preloading). +) + +// TODO: dlmopen +// TODO: dlvsym +// TODO: dladdr +// - dladdr1 +// TODO: dlinfo +// - RTLD_DI_LMID +// - RTLD_DI_LINKMAP +// - RTLD_DI_ORIGIN +// - RTLD_DI_SERINFO +// - RTLD_DI_SERINFOSIZE +// - RTLD_DI_MODID +// - RTLD_DI_DATA +// TODO: dl_iterate_phdr +// TODO: rtld-audit(7) + -- cgit v1.2.3