#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    FILE *fp;
    char buff[100];
    
    if(seteuid(0) == -1) {
        fprintf(stderr, "Failed to set UID to root - is this binary setuid root?\n");
        return -1;
    }
    
    if(argc != 2 || (strcmp(argv[1], "0") != 0 && strcmp(argv[1], "2") != 0)) {
        fprintf(stderr, "Usage: %s [0 or 2]\nSets randomize_va_space to 0 (ASLR off) or 2 (ASLR on)\n", argv[0]);
        return -1;
    }
    
    fp = fopen("/proc/sys/kernel/randomize_va_space", "w");
    fprintf(fp, "%s\n", argv[1]);
    fclose(fp);
    
    fp = fopen("/proc/sys/kernel/randomize_va_space", "r");
    fgets(buff, 99, fp);
    fclose(fp);
    
    printf("randomize_va_space is now %s", buff);
    return 0;
}