#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);
}
-
Adam Blank authoredda35a548