diff options
author | johannst <johannst@users.noreply.github.com> | 2024-04-06 21:17:19 +0000 |
---|---|---|
committer | johannst <johannst@users.noreply.github.com> | 2024-04-06 21:17:19 +0000 |
commit | 92fc0e8e46352a593c3ce7f87292ee1c4ee4c4e4 (patch) | |
tree | 6e8192180aed620c4d9b93895a7532df1ec9aca4 /development/ldso/deepbind/main.c | |
parent | 63d71256f83e5da6479d90d1bbdaf17ad6d31f02 (diff) | |
download | notes-92fc0e8e46352a593c3ce7f87292ee1c4ee4c4e4.tar.gz notes-92fc0e8e46352a593c3ce7f87292ee1c4ee4c4e4.zip |
deploy: 6d2292f2431ec9405b8789c28c81e8e711c15b2d
Diffstat (limited to 'development/ldso/deepbind/main.c')
-rw-r--r-- | development/ldso/deepbind/main.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/development/ldso/deepbind/main.c b/development/ldso/deepbind/main.c new file mode 100644 index 0000000..6d93520 --- /dev/null +++ b/development/ldso/deepbind/main.c @@ -0,0 +1,40 @@ +#include <dlfcn.h> +#include <stdio.h> + +int main() { + puts("-- deep --"); + // Load library into its own LOCAL scope with DEEPBINDING, meaning that + // symbols will first resolve to the library + its dependencies first before + // considering global symbols. + void* h1 = dlopen("./libdeep.so", RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND); + if (h1) { + // Lookup symbol in the libraries LOCAL scope (library + its own + // dependencies). + void (*test_fn)() = dlsym(h1, "test"); + test_fn(); + + // Lookup non-existing symbol in the libraries LOCAL scope (library + its + // own dependencies). + (void)dlsym(h1, "libdeep_main"); + } + + puts("-- nodp --"); + // Load library into its own LOCAL scope. + void* h2 = dlopen("./libnodp.so", RTLD_LOCAL | RTLD_LAZY); + if (h2) { + // Lookup symbol in the libraries LOCAL scope (library + its own + // dependencies). + void (*test_fn)() = dlsym(h2, "test"); + test_fn(); + + // Lookup non-existing symbol in the libraries LOCAL scope (library + its + // own dependencies). + (void)dlsym(h2, "libnodp_main"); + } + + puts("-- main --"); + // Lookup non-existing symbol in the GLOBAL scope. + (void)dlsym(RTLD_DEFAULT, "default_main"); + + return 0; +} |