test.c 743 Bytes
#include <stdlib.h>
#include <stdio.h>

volatile size_t get_kernel_data_length() {
    FILE* kernel_data_length = fopen("/sys/kernel/kernel_data/length", "rt");
    volatile size_t length = 0;
    fscanf(kernel_data_length, "%zu\n", &length);
    fclose(kernel_data_length);
    return length;
}

void *get_kernel_data_address() {
    FILE* kernel_data_address = fopen("/sys/kernel/kernel_data/address", "rt");
    void *addr = NULL;
    fscanf(kernel_data_address, "%p\n", &addr);
    fclose(kernel_data_address);
    return addr;
}

int main() {
    void *addr = get_kernel_data_address();

    volatile size_t len = get_kernel_data_length();
    printf("secret is at %p with length %zu\n", addr, len);
    printf("secret is %s\n", addr);
}