31 lines · c
1// SPDX-License-Identifier: GPL-2.02static int find_map(void **start, void **end, const char *name)3{4 FILE *maps;5 char line[128];6 int found = 0;7 8 maps = fopen("/proc/self/maps", "r");9 if (!maps) {10 fprintf(stderr, "cannot open maps\n");11 return -1;12 }13 14 while (!found && fgets(line, sizeof(line), maps)) {15 int m = -1;16 17 /* We care only about private r-x mappings. */18 if (2 != sscanf(line, "%p-%p r-xp %*x %*x:%*x %*u %n",19 start, end, &m))20 continue;21 if (m < 0)22 continue;23 24 if (!strncmp(&line[m], name, strlen(name)))25 found = 1;26 }27 28 fclose(maps);29 return !found;30}31