summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorDavid Drysdale <drysdale@google.com>2015-08-11 10:31:29 +0100
committerPaul Moore <pmoore@redhat.com>2015-08-12 21:23:41 -0400
commit641cc809f5699fede96a76821de6fed8b7375c73 (patch)
tree8d09d8ca523432cfa050984f07aae064ed642766 /tools
parenta76904d09b63c5888088dd50c2a409f938fe9062 (diff)
downloadlibseccomp-641cc809f5699fede96a76821de6fed8b7375c73.tar.gz
tools: support more LD modes in disassembler
Add support for other modes for LD/LDX operations (even though they are rare in seccomp BPF programs), specifically BPF_IMM, BPF_IND, BPF_LEN and BPF_MSH. Signed-off-by: David Drysdale <drysdale@google.com> Signed-off-by: Paul Moore <pmoore@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/scmp_bpf_disasm.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/tools/scmp_bpf_disasm.c b/tools/scmp_bpf_disasm.c
index b412759..911fd85 100644
--- a/tools/scmp_bpf_disasm.c
+++ b/tools/scmp_bpf_disasm.c
@@ -199,6 +199,18 @@ static void bpf_decode_args(const bpf_instr_raw *bpf, unsigned int line)
case BPF_MEM:
printf("$temp[%u]", bpf->k);
break;
+ case BPF_IMM:
+ printf("%u", bpf->k);
+ break;
+ case BPF_IND:
+ printf("$data[X + %u]", bpf->k);
+ break;
+ case BPF_LEN:
+ printf("len($data)");
+ break;
+ case BPF_MSH:
+ printf("4 * $data[%u] & 0x0f", bpf->k);
+ break;
}
break;
case BPF_ST:
@@ -312,6 +324,18 @@ static void bpf_dot_decode_args(const bpf_instr_raw *bpf, unsigned int line)
case BPF_MEM:
printf(" $temp[%u]\",shape=parallelogram]\n", bpf->k);
break;
+ case BPF_IMM:
+ printf(" %u\",shape=parallelogram]\n", bpf->k);
+ break;
+ case BPF_IND:
+ printf(" $data[X + %u]\",shape=parallelogram]\n", bpf->k);
+ break;
+ case BPF_LEN:
+ printf(" len($data)\",shape=parallelogram]\n");
+ break;
+ case BPF_MSH:
+ printf(" 4 * $data[%u] & 0x0f\",shape=parallelogram]\n", bpf->k);
+ break;
}
break;
case BPF_ST: