diff options
| author | van Hauser <vh@thc.org> | 2022-01-11 12:20:35 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-11 12:20:35 +0100 |
| commit | 10dae419d6e3ebc38f53840c5abfe98e9c901217 (patch) | |
| tree | 352576e19c8a504c40ea58dbb141056762901a69 /frida_mode/addr/addr.c | |
| parent | 74a8f145e09d0361d8f576eb3f2e8881b6116f18 (diff) | |
| parent | d2715336a54635bb6e617a2e739c0ad5fe51d28d (diff) | |
| download | afl++-10dae419d6e3ebc38f53840c5abfe98e9c901217.tar.gz | |
Merge pull request #1236 from AFLplusplus/dev
push to stable
Diffstat (limited to 'frida_mode/addr/addr.c')
| -rw-r--r-- | frida_mode/addr/addr.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/frida_mode/addr/addr.c b/frida_mode/addr/addr.c new file mode 100644 index 00000000..371f69d4 --- /dev/null +++ b/frida_mode/addr/addr.c @@ -0,0 +1,39 @@ +#include <errno.h> +#include <link.h> +#include <stdio.h> +#include <unistd.h> +#include <sys/personality.h> + +#define UNUSED_PARAMETER(x) (void)(x) + +int phdr_callback(struct dl_phdr_info *info, size_t size, void *data) +{ + UNUSED_PARAMETER (size); + + ElfW(Addr) * base = data; + + if (info->dlpi_name[0] == 0) { *base = info->dlpi_addr; } + return 0; +} + +int main (int argc, char** argv, char** envp) { + UNUSED_PARAMETER (argc); + + ElfW(Addr) base = 0; + + int persona = personality(ADDR_NO_RANDOMIZE); + if (persona == -1) { + + printf("Failed to set ADDR_NO_RANDOMIZE: %d", errno); + return 1; + } + + if ((persona & ADDR_NO_RANDOMIZE) == 0) { execvpe(argv[0], argv, envp); } + + dl_iterate_phdr(phdr_callback, &base); + + printf("%p\n", (void *)base); + if (base == 0) { return 1; } + + return 0; +} |
