#include <stdio.h>#include <string.h>#include "pcap-int.h"Include dependency graph for bpf_image.c:

Go to the source code of this file.
Functions | |
| char * | bpf_image (struct bpf_insn *p, int n) |
Variables | |
| const char | rcsid [] |
|
||||||||||||
|
Definition at line 41 of file bpf_image.c. References BPF_A, BPF_ABS, BPF_ADD, BPF_ALU, BPF_AND, BPF_B, BPF_CLASS, BPF_DIV, BPF_H, BPF_IMM, BPF_IND, BPF_JA, BPF_JEQ, BPF_JGE, BPF_JGT, BPF_JMP, BPF_JSET, BPF_K, BPF_LD, BPF_LDX, BPF_LEN, BPF_LSH, BPF_MEM, BPF_MISC, BPF_MSH, BPF_MUL, BPF_NEG, BPF_OP, BPF_OR, BPF_RET, BPF_RSH, BPF_ST, BPF_STX, BPF_SUB, BPF_TAX, BPF_TXA, BPF_W, BPF_X, fmt, p, and snprintf(). Referenced by bpf_dump().
00044 {
00045 int v;
00046 char *fmt, *op;
00047 static char image[256];
00048 char operand[64];
00049
00050 v = p->k;
00051 switch (p->code) {
00052
00053 default:
00054 op = "unimp";
00055 fmt = "0x%x";
00056 v = p->code;
00057 break;
00058
00059 case BPF_RET|BPF_K:
00060 op = "ret";
00061 fmt = "#%d";
00062 break;
00063
00064 case BPF_RET|BPF_A:
00065 op = "ret";
00066 fmt = "";
00067 break;
00068
00069 case BPF_LD|BPF_W|BPF_ABS:
00070 op = "ld";
00071 fmt = "[%d]";
00072 break;
00073
00074 case BPF_LD|BPF_H|BPF_ABS:
00075 op = "ldh";
00076 fmt = "[%d]";
00077 break;
00078
00079 case BPF_LD|BPF_B|BPF_ABS:
00080 op = "ldb";
00081 fmt = "[%d]";
00082 break;
00083
00084 case BPF_LD|BPF_W|BPF_LEN:
00085 op = "ld";
00086 fmt = "#pktlen";
00087 break;
00088
00089 case BPF_LD|BPF_W|BPF_IND:
00090 op = "ld";
00091 fmt = "[x + %d]";
00092 break;
00093
00094 case BPF_LD|BPF_H|BPF_IND:
00095 op = "ldh";
00096 fmt = "[x + %d]";
00097 break;
00098
00099 case BPF_LD|BPF_B|BPF_IND:
00100 op = "ldb";
00101 fmt = "[x + %d]";
00102 break;
00103
00104 case BPF_LD|BPF_IMM:
00105 op = "ld";
00106 fmt = "#0x%x";
00107 break;
00108
00109 case BPF_LDX|BPF_IMM:
00110 op = "ldx";
00111 fmt = "#0x%x";
00112 break;
00113
00114 case BPF_LDX|BPF_MSH|BPF_B:
00115 op = "ldxb";
00116 fmt = "4*([%d]&0xf)";
00117 break;
00118
00119 case BPF_LD|BPF_MEM:
00120 op = "ld";
00121 fmt = "M[%d]";
00122 break;
00123
00124 case BPF_LDX|BPF_MEM:
00125 op = "ldx";
00126 fmt = "M[%d]";
00127 break;
00128
00129 case BPF_ST:
00130 op = "st";
00131 fmt = "M[%d]";
00132 break;
00133
00134 case BPF_STX:
00135 op = "stx";
00136 fmt = "M[%d]";
00137 break;
00138
00139 case BPF_JMP|BPF_JA:
00140 op = "ja";
00141 fmt = "%d";
00142 v = n + 1 + p->k;
00143 break;
00144
00145 case BPF_JMP|BPF_JGT|BPF_K:
00146 op = "jgt";
00147 fmt = "#0x%x";
00148 break;
00149
00150 case BPF_JMP|BPF_JGE|BPF_K:
00151 op = "jge";
00152 fmt = "#0x%x";
00153 break;
00154
00155 case BPF_JMP|BPF_JEQ|BPF_K:
00156 op = "jeq";
00157 fmt = "#0x%x";
00158 break;
00159
00160 case BPF_JMP|BPF_JSET|BPF_K:
00161 op = "jset";
00162 fmt = "#0x%x";
00163 break;
00164
00165 case BPF_JMP|BPF_JGT|BPF_X:
00166 op = "jgt";
00167 fmt = "x";
00168 break;
00169
00170 case BPF_JMP|BPF_JGE|BPF_X:
00171 op = "jge";
00172 fmt = "x";
00173 break;
00174
00175 case BPF_JMP|BPF_JEQ|BPF_X:
00176 op = "jeq";
00177 fmt = "x";
00178 break;
00179
00180 case BPF_JMP|BPF_JSET|BPF_X:
00181 op = "jset";
00182 fmt = "x";
00183 break;
00184
00185 case BPF_ALU|BPF_ADD|BPF_X:
00186 op = "add";
00187 fmt = "x";
00188 break;
00189
00190 case BPF_ALU|BPF_SUB|BPF_X:
00191 op = "sub";
00192 fmt = "x";
00193 break;
00194
00195 case BPF_ALU|BPF_MUL|BPF_X:
00196 op = "mul";
00197 fmt = "x";
00198 break;
00199
00200 case BPF_ALU|BPF_DIV|BPF_X:
00201 op = "div";
00202 fmt = "x";
00203 break;
00204
00205 case BPF_ALU|BPF_AND|BPF_X:
00206 op = "and";
00207 fmt = "x";
00208 break;
00209
00210 case BPF_ALU|BPF_OR|BPF_X:
00211 op = "or";
00212 fmt = "x";
00213 break;
00214
00215 case BPF_ALU|BPF_LSH|BPF_X:
00216 op = "lsh";
00217 fmt = "x";
00218 break;
00219
00220 case BPF_ALU|BPF_RSH|BPF_X:
00221 op = "rsh";
00222 fmt = "x";
00223 break;
00224
00225 case BPF_ALU|BPF_ADD|BPF_K:
00226 op = "add";
00227 fmt = "#%d";
00228 break;
00229
00230 case BPF_ALU|BPF_SUB|BPF_K:
00231 op = "sub";
00232 fmt = "#%d";
00233 break;
00234
00235 case BPF_ALU|BPF_MUL|BPF_K:
00236 op = "mul";
00237 fmt = "#%d";
00238 break;
00239
00240 case BPF_ALU|BPF_DIV|BPF_K:
00241 op = "div";
00242 fmt = "#%d";
00243 break;
00244
00245 case BPF_ALU|BPF_AND|BPF_K:
00246 op = "and";
00247 fmt = "#0x%x";
00248 break;
00249
00250 case BPF_ALU|BPF_OR|BPF_K:
00251 op = "or";
00252 fmt = "#0x%x";
00253 break;
00254
00255 case BPF_ALU|BPF_LSH|BPF_K:
00256 op = "lsh";
00257 fmt = "#%d";
00258 break;
00259
00260 case BPF_ALU|BPF_RSH|BPF_K:
00261 op = "rsh";
00262 fmt = "#%d";
00263 break;
00264
00265 case BPF_ALU|BPF_NEG:
00266 op = "neg";
00267 fmt = "";
00268 break;
00269
00270 case BPF_MISC|BPF_TAX:
00271 op = "tax";
00272 fmt = "";
00273 break;
00274
00275 case BPF_MISC|BPF_TXA:
00276 op = "txa";
00277 fmt = "";
00278 break;
00279 }
00280 (void)snprintf(operand, sizeof operand, fmt, v);
00281 (void)snprintf(image, sizeof image,
00282 (BPF_CLASS(p->code) == BPF_JMP &&
00283 BPF_OP(p->code) != BPF_JA) ?
00284 "(%03d) %-8s %-16s jt %d\tjf %d"
00285 : "(%03d) %-8s %s",
00286 n, op, operand, n + 1 + p->jt, n + 1 + p->jf);
00287 return image;
00288 }
|
|
|
Initial value:
"@(#) $Header: /tcpdump/master/libpcap/bpf_image.c,v 1.24.4.1 2002/03/24 23:25:37 guy Exp $ (LBL)"
Definition at line 23 of file bpf_image.c. |
1.3.5