diff options
| author | Your Name <you@example.com> | 2022-08-01 08:10:45 +0100 |
|---|---|---|
| committer | Your Name <you@example.com> | 2022-08-05 20:56:14 +0100 |
| commit | 00b5d3792de4a7867da9cb5abd08de9fca484db1 (patch) | |
| tree | b63b513437510d0496d1d852efba49f0dec86dc6 /frida_mode/src/shm.c | |
| parent | e9cb939956557b1f10bbab289d965f84702962eb (diff) | |
| download | afl++-00b5d3792de4a7867da9cb5abd08de9fca484db1.tar.gz | |
Changes to abstract shared memory
Diffstat (limited to 'frida_mode/src/shm.c')
| -rw-r--r-- | frida_mode/src/shm.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/frida_mode/src/shm.c b/frida_mode/src/shm.c new file mode 100644 index 00000000..c76427cb --- /dev/null +++ b/frida_mode/src/shm.c @@ -0,0 +1,36 @@ +#include "shm.h" +#include "util.h" + +#include <errno.h> +#include <fcntl.h> +#include <string.h> +#include <sys/ipc.h> +#include <sys/mman.h> +#include <sys/shm.h> + +void *shm_create(size_t size) { + + int shm_id = + shmget(IPC_PRIVATE, size, IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR); + if (shm_id < 0) { FFATAL("shm_id < 0 - errno: %d\n", errno); } + + void *addr = shmat(shm_id, NULL, 0); + if (addr == MAP_FAILED) { FFATAL("addr == MAP_FAILED - errno: %d\n", errno); } + + /* + * Configure the shared memory region to be removed once the process + * dies. + */ + if (shmctl(shm_id, IPC_RMID, NULL) < 0) { + + FFATAL("shmctl (IPC_RMID) < 0 - errno: %d\n", errno); + + } + + /* Clear it, not sure it's necessary, just seems like good practice */ + memset(addr, '\0', size); + + return addr; + +} + |
