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.
23 static const char rcsid
[] _U_
=
24 "@(#) $Header: /tcpdump/master/libpcap/bpf_image.c,v 1.28 2008-01-02 04:16:46 guy Exp $ (LBL)";
32 #include <pcap-stdinc.h>
39 #ifdef HAVE_SYS_BITYPES_H
40 #include <sys/bitypes.h>
42 #include <sys/types.h>
50 #ifdef HAVE_OS_PROTO_H
56 const struct bpf_insn
*p
;
61 static char image
[256];
83 case BPF_LD
|BPF_W
|BPF_ABS
:
88 case BPF_LD
|BPF_H
|BPF_ABS
:
93 case BPF_LD
|BPF_B
|BPF_ABS
:
98 case BPF_LD
|BPF_W
|BPF_LEN
:
103 case BPF_LD
|BPF_W
|BPF_IND
:
108 case BPF_LD
|BPF_H
|BPF_IND
:
113 case BPF_LD
|BPF_B
|BPF_IND
:
123 case BPF_LDX
|BPF_IMM
:
128 case BPF_LDX
|BPF_MSH
|BPF_B
:
130 fmt
= "4*([%d]&0xf)";
138 case BPF_LDX
|BPF_MEM
:
159 case BPF_JMP
|BPF_JGT
|BPF_K
:
164 case BPF_JMP
|BPF_JGE
|BPF_K
:
169 case BPF_JMP
|BPF_JEQ
|BPF_K
:
174 case BPF_JMP
|BPF_JSET
|BPF_K
:
179 case BPF_JMP
|BPF_JGT
|BPF_X
:
184 case BPF_JMP
|BPF_JGE
|BPF_X
:
189 case BPF_JMP
|BPF_JEQ
|BPF_X
:
194 case BPF_JMP
|BPF_JSET
|BPF_X
:
199 case BPF_ALU
|BPF_ADD
|BPF_X
:
204 case BPF_ALU
|BPF_SUB
|BPF_X
:
209 case BPF_ALU
|BPF_MUL
|BPF_X
:
214 case BPF_ALU
|BPF_DIV
|BPF_X
:
219 case BPF_ALU
|BPF_AND
|BPF_X
:
224 case BPF_ALU
|BPF_OR
|BPF_X
:
229 case BPF_ALU
|BPF_LSH
|BPF_X
:
234 case BPF_ALU
|BPF_RSH
|BPF_X
:
239 case BPF_ALU
|BPF_ADD
|BPF_K
:
244 case BPF_ALU
|BPF_SUB
|BPF_K
:
249 case BPF_ALU
|BPF_MUL
|BPF_K
:
254 case BPF_ALU
|BPF_DIV
|BPF_K
:
259 case BPF_ALU
|BPF_AND
|BPF_K
:
264 case BPF_ALU
|BPF_OR
|BPF_K
:
269 case BPF_ALU
|BPF_LSH
|BPF_K
:
274 case BPF_ALU
|BPF_RSH
|BPF_K
:
279 case BPF_ALU
|BPF_NEG
:
284 case BPF_MISC
|BPF_TAX
:
289 case BPF_MISC
|BPF_TXA
:
294 (void)snprintf(operand
, sizeof operand
, fmt
, v
);
295 if (BPF_CLASS(p
->code
) == BPF_JMP
&& BPF_OP(p
->code
) != BPF_JA
) {
296 (void)snprintf(image
, sizeof image
,
297 "(%03d) %-8s %-16s jt %d\tjf %d",
298 n
, op
, operand
, n
+ 1 + p
->jt
, n
+ 1 + p
->jf
);
300 (void)snprintf(image
, sizeof image
,