How do I printf a capability value?¶
The printf
function has been extended with support for displaying
capability values.
Capability-aware printf
re-uses the C format specifier for
pointer values, i.e. %p
.
You can print the raw address in the capability with the %p
specifier, or print the address plus pretty-printed metadata with the %#p
variant.
#include <stdio.h>
#include <stdlib.h>
int main() {
void *x = (void *)malloc(1);
printf("The address in this capability is %p\n", x);
printf("The full capability (incl metadata) is %#p\n", x);
}
This will output:
The address in this capability is 0x40823010
The full capability (incl metadata) is 0x40823010 [rwRW,0x40823010-0x40823011]
More info¶
Check out the CHERI C/C++ programming wiki info on printf formats.