Использование dlopen для получения функций выделения памяти в libc - PullRequest
1 голос
/ 27 июля 2011

Может кто-нибудь помочь мне узнать, как я могу использовать dlopen для управления функциями распределения памяти в libc?Особенно, что-то вроде поиска пути libc и последующего управления.Какие режимы следует использовать для вызова dlsym?

Идея такова: 1) Поиск пути libc 2) Вызов dlopen для него 3) Использование dlsym для доступа к функциям памяти (malloc, calloc и т. Д.) И 4) использование функций

Пожалуйста, помогите мне с фрагментом кода выше 4 шагов.

Спасибо в адвенсе.

1 Ответ

4 голосов
/ 27 июля 2011

Вот фрагмент кода, HTH

#include <dlfcn.h>
#include <stdio.h>
int main()
{  
   void *handle; 

   // dlopen will search the path for you
   // /usr/lib/libc.so is a linker script, not an elf file
   // so it won't work with dlopen. 
   handle = dlopen("libc.so.6", RTLD_LAZY); 

   if(handle){
         void* (*mallocptr)(size_t);
         void (*freeptr)(void*);

         // Locate symbols
         *(void**)(&mallocptr) = dlsym(handle, "malloc");
         *(void**)(&freeptr) = dlsym(handle, "free");

         if(!mallocptr || !freeptr){
            printf("%s\n", dlerror());
            return 1;
         }

         // Allocate and use memory
         char *ptr = (*mallocptr)(4);
         ptr[0] = 'H'; ptr[1] = 'i'; ptr[2] = '\n'; ptr[3] = '\0';
         printf(ptr);

         // Free it
         (*freeptr)(ptr);
   }
   else{
      printf("%s\n", dlerror());
      return 1;
   }
   return 0;
}
...