/* * Copyright (c) 2023 Arm Limited. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ #define _GNU_SOURCE #include #include #include #include #include #include #include "morello.h" long global_variable = 42l; int main(int argc, char *argv[]) { long double local_variable = 3.14; printf("hello morello\n"); printf("here are some capabilities pointing to...\n"); // objects and functions printf(" - local var (long double): %s\n", cap_to_str(NULL, &local_variable)); printf(" - stack (CSP): %s\n", cap_to_str(NULL, cheri_csp_get())); printf(" - global var (long): %s\n", cap_to_str(NULL, &global_variable)); printf(" - sentry (main): %s\n", cap_to_str(NULL, &main)); printf(" - program counter (PCC): %s\n", cap_to_str(NULL, cheri_pcc_get())); // memory mappings void *private_rw_mapping = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); printf(" - private rw mapping: %s\n", cap_to_str(NULL, private_rw_mapping)); void *shared_rw_mapping = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); printf(" - shared rw mapping: %s\n", cap_to_str(NULL, shared_rw_mapping)); int fd = open("/proc/self/exe", O_RDONLY); void *private_ro_file_mapping = mmap(NULL, 4096, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, fd, 0); printf(" - private ro file mapping: %s\n", cap_to_str(NULL, private_ro_file_mapping)); close(fd); // misc capabilities printf(" - AT_CHERI_SEAL_CAP: %s\n", cap_to_str(NULL, getauxptr(AT_CHERI_SEAL_CAP))); printf(" - AT_CHERI_CID_CAP: %s\n", cap_to_str(NULL, getauxptr(AT_CHERI_CID_CAP))); printf(" - AT_ARGV: %s\n", cap_to_str(NULL, getauxptr(AT_ARGV))); printf(" - AT_ENVP: %s\n", cap_to_str(NULL, getauxptr(AT_ENVP))); printf(" - AT_CHERI_STACK_CAP: %s\n", cap_to_str(NULL, getauxptr(AT_CHERI_STACK_CAP))); return 0; }