Last active
February 5, 2020 23:15
-
-
Save drakenclimber/934e7377498a53fb70dfc535ac84fb62 to your computer and use it in GitHub Desktop.
print libseccomp argument chains
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdarg.h> | |
#include <stdio.h> | |
static void print_line(int indent_level, const char *format, ...) | |
{ | |
int i; | |
for (i = 0; i < indent_level; i++) | |
fprintf(stdout, " "); | |
va_list(args); | |
va_start(args, format); | |
vfprintf(stdout, format, args); | |
va_end(args); | |
} | |
#define INDENT 2 | |
static void print_chain(int indent_level, struct db_arg_chain_tree *chain) | |
{ | |
print_line(indent_level, "----chain---- %p\n", chain); | |
print_line(indent_level + INDENT, | |
"arg = %d mask = 0x%x datum = 0x%x op = %d\n", | |
chain->arg, chain->mask, chain->datum, chain->op); | |
print_line(indent_level + INDENT, | |
"act_t_flg = %d act_f_flg = %d\n", | |
chain->act_t_flg, chain->act_f_flg); | |
print_line(indent_level + INDENT, | |
"act_t = 0x%08x act_f = 0x%08x\n", | |
chain->act_t, chain->act_f); | |
print_line(indent_level + INDENT, | |
"lvl_prv = %p lvl nxt = %p\n", | |
chain->lvl_prv, chain->lvl_nxt); | |
print_line(indent_level + INDENT, | |
"nxt_t = %p nxt_f = %p\n", | |
chain->nxt_t, chain->nxt_f); | |
} | |
static void print_chains(int indent_level, | |
const struct db_sys_list *sys, | |
struct db_arg_chain_tree *chain, | |
bool print_syscall_header) | |
{ | |
if (chain == NULL) | |
return; | |
if (print_syscall_header) | |
print_line(indent_level, "----syscall %d----\n", sys->num); | |
print_chain(indent_level + INDENT, chain); | |
print_line(indent_level + 2 * INDENT, "----true chain----\n"); | |
print_chains(indent_level + 2 * INDENT, sys, chain->nxt_t, false); | |
print_line(indent_level + 2 * INDENT, "----false chain----\n"); | |
print_chains(indent_level + 2 * INDENT, sys, chain->nxt_f, false); | |
print_line(indent_level + 2 * INDENT, "----lvl nxt chain----\n"); | |
print_chains(indent_level + 2 * INDENT, sys, chain->lvl_nxt, false); | |
} | |
/* example usage */ | |
for (i = 0; i < col->filter_cnt; i++) { | |
syscall = col->filters[i]->syscalls; | |
fprintf(stderr, "filter[%d]\n", i); | |
while(syscall) { | |
print_chains(0, syscall, syscall->chains, true); | |
syscall = syscall->next; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment