代码中使用/proc 获取动态库的绝对路径
时间: 2024-05-10 13:15:57 浏览: 203
在Linux系统下,可以使用/proc/{PID}/maps文件获取进程的内存映射信息。在其中可以找到动态库的加载地址和绝对路径。
以下是获取动态库绝对路径的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define MAX_PATH 256
char* get_lib_path(pid_t pid, const char* lib_name) {
char maps_path[MAX_PATH];
char line[MAX_PATH];
char* path;
snprintf(maps_path, MAX_PATH, "/proc/%d/maps", pid);
FILE* fp = fopen(maps_path, "r");
if (!fp) {
perror("fopen");
exit(EXIT_FAILURE);
}
while (fgets(line, MAX_PATH, fp)) {
if (strstr(line, lib_name)) {
path = strtok(line, " ");
path = strtok(NULL, " ");
path[strlen(path) - 1] = '\0';
break;
}
}
fclose(fp);
return path;
}
int main() {
pid_t pid = getpid();
const char* lib_name = "libc.so.6";
char* path = get_lib_path(pid, lib_name);
printf("%s is loaded at %s\n", lib_name, path);
return 0;
}
```
注意:该方法只适用于获取当前进程动态库的绝对路径,无法获取其他进程的动态库路径。另外,/proc目录下的文件和目录只有在Linux系统下才存在,其他操作系统可能无法使用。
阅读全文