怎么让自己编写的so里的函数也通过PLT表进行处理地址
时间: 2023-12-10 16:37:00 浏览: 18
将自己编写的函数加入到共享对象的符号表中,可以通过以下几个步骤实现:
1. 在源代码中定义函数,并编写对应的头文件。例如,定义一个名为 `my_function` 的函数,可以在 `my_function.c` 文件中编写函数实现,并在 `my_function.h` 文件中编写函数声明。
2. 将源代码编译成共享对象文件(.so)。
```
$ gcc -c -fpic my_function.c
$ gcc -shared -o libmy.so my_function.o
```
编译选项 `-fpic` 表示生成位置无关代码,`-shared` 表示生成共享对象文件。
3. 在应用程序中调用共享对象中的函数,需要在程序中包含函数的头文件,并使用 `dlopen()` 函数打开共享对象文件,并使用 `dlsym()` 函数获取函数地址。
```
#include <stdio.h>
#include <dlfcn.h>
#include "my_function.h"
int main() {
void *handle = dlopen("libmy.so", RTLD_LAZY);
if (!handle) {
printf("Failed to open shared object file\n");
return 1;
}
void (*my_func)() = dlsym(handle, "my_function");
if (!my_func) {
printf("Failed to get function address\n");
return 1;
}
my_func();
dlclose(handle);
return 0;
}
```
上述代码中,`dlopen()` 函数打开共享对象文件,返回一个句柄,`dlsym()` 函数通过句柄和函数名获取函数地址,然后可以直接调用该函数。
注意:在编写共享对象时,应该遵循一些规则,例如将函数名前加上下划线,使用 `extern "C"` 声明,以便在 C++ 中使用。