gencode.h
上传用户:tjescc
上传日期:2021-02-23
资源大小:419k
文件大小:5k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996
  3.  * The Regents of the University of California.  All rights reserved.
  4.  *
  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
  16.  * written permission.
  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.
  20.  *
  21.  * @(#) $Header: /usr/local/cvs/nessus-libraries/libpcap-nessus/gencode.h,v 1.3 2003/02/06 20:28:07 renaud Exp $ (LBL)
  22.  */
  23. /*XXX*/
  24. #include "gnuc.h"
  25. /* Address qualifiers. */
  26. #define Q_HOST 1
  27. #define Q_NET 2
  28. #define Q_PORT 3
  29. #define Q_GATEWAY 4
  30. #define Q_PROTO 5
  31. /* Protocol qualifiers. */
  32. #define Q_LINK 1
  33. #define Q_IP 2
  34. #define Q_ARP 3
  35. #define Q_RARP 4
  36. #define Q_TCP 5
  37. #define Q_UDP 6
  38. #define Q_ICMP 7
  39. #define Q_IGMP 8
  40. #define Q_IGRP 9
  41. #define Q_ATALK 10
  42. #define Q_DECNET 11
  43. #define Q_LAT 12
  44. #define Q_SCA 13
  45. #define Q_MOPRC 14
  46. #define Q_MOPDL 15
  47. /* Directional qualifiers. */
  48. #define Q_SRC 1
  49. #define Q_DST 2
  50. #define Q_OR 3
  51. #define Q_AND 4
  52. #define Q_DEFAULT 0
  53. #define Q_UNDEF 255
  54. struct stmt {
  55. int code;
  56. bpf_int32 k;
  57. };
  58. struct slist {
  59. struct stmt s;
  60. struct slist *next;
  61. };
  62. /* 
  63.  * A bit vector to represent definition sets.  We assume TOT_REGISTERS
  64.  * is smaller than 8*sizeof(atomset).
  65.  */
  66. typedef bpf_u_int32 atomset;
  67. #define ATOMMASK(n) (1 << (n))
  68. #define ATOMELEM(d, n) (d & ATOMMASK(n))
  69. /*
  70.  * An unbounded set.
  71.  */
  72. typedef bpf_u_int32 *uset;
  73. /*
  74.  * Total number of atomic entities, including accumulator (A) and index (X).
  75.  * We treat all these guys similarly during flow analysis.
  76.  */
  77. #define N_ATOMS (BPF_MEMWORDS+2)
  78. struct edge {
  79. int id;
  80. int code;
  81. uset edom;
  82. struct block *succ;
  83. struct block *pred;
  84. struct edge *next; /* link list of incoming edges for a node */
  85. };
  86. struct block {
  87. int id;
  88. struct slist *stmts; /* side effect stmts */
  89. struct stmt s; /* branch stmt */
  90. int mark;
  91. int longjt; /* jt branch requires long jump */
  92. int longjf; /* jf branch requires long jump */
  93. int level;
  94. int offset;
  95. int sense;
  96. struct edge et;
  97. struct edge ef;
  98. struct block *head;
  99. struct block *link; /* link field used by optimizer */
  100. uset dom;
  101. uset closure;
  102. struct edge *in_edges;
  103. atomset def, kill;
  104. atomset in_use;
  105. atomset out_use;
  106. int oval;
  107. int val[N_ATOMS];
  108. };
  109. struct arth {
  110. struct block *b; /* protocol checks */
  111. struct slist *s; /* stmt list */
  112. int regno; /* virtual register number of result */
  113. };
  114. struct qual {
  115. unsigned char addr;
  116. unsigned char proto;
  117. unsigned char dir;
  118. unsigned char pad;
  119. };
  120. struct arth *gen_loadi(int);
  121. struct arth *gen_load(int, struct arth *, int);
  122. struct arth *gen_loadlen(void);
  123. struct arth *gen_neg(struct arth *);
  124. struct arth *gen_arth(int, struct arth *, struct arth *);
  125. void gen_and(struct block *, struct block *);
  126. void gen_or(struct block *, struct block *);
  127. void gen_not(struct block *);
  128. struct block *gen_scode(const char *, struct qual);
  129. struct block *gen_ecode(const u_char *, struct qual);
  130. struct block *gen_mcode(const char *, const char *, int, struct qual);
  131. struct block *gen_ncode(const char *, bpf_u_int32, struct qual);
  132. struct block *gen_proto_abbrev(int);
  133. struct block *gen_relation(int, struct arth *, struct arth *, int);
  134. struct block *gen_less(int);
  135. struct block *gen_greater(int);
  136. struct block *gen_byteop(int, int, int);
  137. struct block *gen_broadcast(int);
  138. struct block *gen_multicast(int);
  139. struct block *gen_inbound(int);
  140. void bpf_optimize(struct block **);
  141. #if __STDC__
  142. __dead void bpf_error(const char *, ...)
  143.     __attribute__((volatile, format (printf, 1, 2)));
  144. #endif
  145. void finish_parse(struct block *);
  146. char *sdup(const char *);
  147. struct bpf_insn *icode_to_fcode(struct block *, int *);
  148. int pcap_parse(void);
  149. void lex_init(char *);
  150. void sappend(struct slist *, struct slist *);
  151. /* XXX */
  152. #define JT(b)  ((b)->et.succ)
  153. #define JF(b)  ((b)->ef.succ)