Guest User

Untitled

a guest
Jul 23rd, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.80 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /* link with -ldl */
  5. #include <dlfcn.h> /* dlopen(), dlsym(), dlclose() */
  6.  
  7. void print_usage(int argc, char **argv)
  8. {
  9. fprintf(stderr, "Usage: %s LIB FUNC_NAME\n", argv[0]);
  10. }
  11.  
  12. int main(int argc, char **argv)
  13. {
  14. if (argc <= 2) {
  15. print_usage(argc, argv);
  16. exit(EXIT_FAILURE);
  17. }
  18.  
  19. const char* filename = argv[1];
  20. const char* funcname = argv[2];
  21.  
  22. void *lib = dlopen(filename, RTLD_GLOBAL | RTLD_LAZY);
  23.  
  24. if (lib) {
  25. void (*f)() = dlsym(lib, funcname);
  26.  
  27. if (f) {
  28. f();
  29. } else {
  30. fprintf(stderr, "Failed to find symbol `%s` in %s\n", funcname, filename);
  31. }
  32.  
  33. dlclose(lib);
  34. } else {
  35. fprintf(stderr, "Failed to load library %s\n", filename);
  36. }
  37.  
  38. return 0;
  39. }
Add Comment
Please, Sign In to add comment