BlackBox-dl.c 748 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include <dlfcn.h>
  2. #include <stdio.h>
  3. int main (int argc, char *argv[])
  4. {
  5. void * h;
  6. void * h1;
  7. void (*SetKernelBaseStack) (int);
  8. void (*Init) (void);
  9. int res;
  10. h = dlopen("libBB.so", RTLD_LAZY | RTLD_GLOBAL);
  11. if (h == NULL) {
  12. h1 = dlsym(h, "SetKernelBaseStack");
  13. if (h1 != NULL) {
  14. *(void **) (&SetKernelBaseStack) = h1;
  15. h1 = dlsym(h, "Init");
  16. if (h1 != NULL) {
  17. *(void **) (&Init) = h1;
  18. asm ("movl %%esp, %[res]" : [res] "=m" (res) );
  19. SetKernelBaseStack(res - 8);
  20. printf("before Init()\n");
  21. Init();
  22. printf("after Init()\n");
  23. res = 0;
  24. } else {
  25. perror(dlerror());
  26. res = 3;
  27. }
  28. } else {
  29. perror(dlerror());
  30. res = 2;
  31. }
  32. } else {
  33. perror(dlerror());
  34. res = 1;
  35. }
  36. return res;
  37. }