嵌入式ARM程序高级调试基础:10.解析 /proc//maps 获取库加载地址 动态计算函数实际地址:实际地址 = 基址 + 偏移 的具体案例代码
以下是一个解析 /proc/<pid>/maps
获取库加载地址并动态计算函数实际地址的完整案例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
// 解析 /proc/<pid>/maps 获取库基地址
unsigned long get_lib_base(pid_t pid, const char* lib_name) {
char maps_path[256];
snprintf(maps_path, sizeof(maps_path), "/proc/%d/maps", pid);
FILE* maps = fopen(maps_path, "r");
if (!maps) {
perror("fopen");
return 0;
}
char line[1024];
unsigned long base = 0;
while (fgets(line, sizeof(line), maps)) {
if (strstr(line, lib_name)) {
// 解析行首的地址范围 (格