123456789101112131415161718192021222324252627282930 |
- // SPDX-License-Identifier: GPL-2.0
- static int find_map(void **start, void **end, const char *name)
- {
- FILE *maps;
- char line[128];
- int found = 0;
- maps = fopen("/proc/self/maps", "r");
- if (!maps) {
- fprintf(stderr, "cannot open maps\n");
- return -1;
- }
- while (!found && fgets(line, sizeof(line), maps)) {
- int m = -1;
- /* We care only about private r-x mappings. */
- if (2 != sscanf(line, "%p-%p r-xp %*x %*x:%*x %*u %n",
- start, end, &m))
- continue;
- if (m < 0)
- continue;
- if (!strncmp(&line[m], name, strlen(name)))
- found = 1;
- }
- fclose(maps);
- return !found;
- }
|