]>
The Tcpdump Group git mirrors - libpcap/blob - bpf_image.c
3e9a23f51b4cd871e873085f18f8307372989274
2 * Copyright (c) 1990, 1991, 1992, 1994, 1995, 1996
3 * The Regents of the University of California. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that: (1) source code distributions
7 * retain the above copyright notice and this paragraph in its entirety, (2)
8 * distributions including binary code include the above copyright notice and
9 * this paragraph in its entirety in the documentation or other materials
10 * provided with the distribution, and (3) all advertising materials mentioning
11 * features or use of this software display the following acknowledgement:
12 * ``This product includes software developed by the University of California,
13 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
14 * the University nor the names of its contributors may be used to endorse
15 * or promote products derived from this software without specific prior
17 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27 #include <pcap-stdinc.h>
34 #ifdef HAVE_SYS_BITYPES_H
35 #include <sys/bitypes.h>
37 #include <sys/types.h>
45 #ifdef HAVE_OS_PROTO_H
51 const struct bpf_insn
*p
;
56 static char image
[256];
78 case BPF_LD
|BPF_W
|BPF_ABS
:
83 case BPF_LD
|BPF_H
|BPF_ABS
:
88 case BPF_LD
|BPF_B
|BPF_ABS
:
93 case BPF_LD
|BPF_W
|BPF_LEN
:
98 case BPF_LD
|BPF_W
|BPF_IND
:
103 case BPF_LD
|BPF_H
|BPF_IND
:
108 case BPF_LD
|BPF_B
|BPF_IND
:
118 case BPF_LDX
|BPF_IMM
:
123 case BPF_LDX
|BPF_MSH
|BPF_B
:
125 fmt
= "4*([%d]&0xf)";
133 case BPF_LDX
|BPF_MEM
:
154 case BPF_JMP
|BPF_JGT
|BPF_K
:
159 case BPF_JMP
|BPF_JGE
|BPF_K
:
164 case BPF_JMP
|BPF_JEQ
|BPF_K
:
169 case BPF_JMP
|BPF_JSET
|BPF_K
:
174 case BPF_JMP
|BPF_JGT
|BPF_X
:
179 case BPF_JMP
|BPF_JGE
|BPF_X
:
184 case BPF_JMP
|BPF_JEQ
|BPF_X
:
189 case BPF_JMP
|BPF_JSET
|BPF_X
:
194 case BPF_ALU
|BPF_ADD
|BPF_X
:
199 case BPF_ALU
|BPF_SUB
|BPF_X
:
204 case BPF_ALU
|BPF_MUL
|BPF_X
:
209 case BPF_ALU
|BPF_DIV
|BPF_X
:
214 case BPF_ALU
|BPF_MOD
|BPF_X
:
219 case BPF_ALU
|BPF_AND
|BPF_X
:
224 case BPF_ALU
|BPF_OR
|BPF_X
:
229 case BPF_ALU
|BPF_XOR
|BPF_X
:
234 case BPF_ALU
|BPF_LSH
|BPF_X
:
239 case BPF_ALU
|BPF_RSH
|BPF_X
:
244 case BPF_ALU
|BPF_ADD
|BPF_K
:
249 case BPF_ALU
|BPF_SUB
|BPF_K
:
254 case BPF_ALU
|BPF_MUL
|BPF_K
:
259 case BPF_ALU
|BPF_DIV
|BPF_K
:
264 case BPF_ALU
|BPF_MOD
|BPF_K
:
269 case BPF_ALU
|BPF_AND
|BPF_K
:
274 case BPF_ALU
|BPF_OR
|BPF_K
:
279 case BPF_ALU
|BPF_XOR
|BPF_K
:
284 case BPF_ALU
|BPF_LSH
|BPF_K
:
289 case BPF_ALU
|BPF_RSH
|BPF_K
:
294 case BPF_ALU
|BPF_NEG
:
299 case BPF_MISC
|BPF_TAX
:
304 case BPF_MISC
|BPF_TXA
:
309 (void)snprintf(operand
, sizeof operand
, fmt
, v
);
310 if (BPF_CLASS(p
->code
) == BPF_JMP
&& BPF_OP(p
->code
) != BPF_JA
) {
311 (void)snprintf(image
, sizeof image
,
312 "(%03d) %-8s %-16s jt %d\tjf %d",
313 n
, op
, operand
, n
+ 1 + p
->jt
, n
+ 1 + p
->jf
);
315 (void)snprintf(image
, sizeof image
,