31 lines
		
	
	
		
			592 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			592 B
		
	
	
	
		
			C
		
	
	
	
	
	
| // 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;
 | |
| }
 |