有人能帮助我知道如何使用dlopen来处理libc内存分配函数吗?特别是,像搜索libc路径然后获取句柄之类的东西。应该使用什么模式来调用dlsym?
想法是:
1)搜索libc路径
2)在其上调用dlopen
3)使用dlsym访问内存函数(malloc、calloc等)和
4)使用功能
请帮助我以上4个步骤的代码片段。
谢谢你的忠告。
最佳答案
这是一段代码,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;
}
关于c - 使用dlopen获取libc内存分配函数的句柄,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6841311/