⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snap_bytecode.c

📁 一个学习SNMP项目:tmoerlan.
💻 C
📖 第 1 页 / 共 2 页
字号:
  case FMULI:  case FDIVI: {    value_t lit;    COPY_LIT(lit,FLOATV,*i);    fprintf(f,"\t");    fprintf_value(p,f,&lit);    break;  }#else    /* polymorphic literals */  case PUSH:  case EQI:  case NEQI:  case GTI:  case GEQI:  case LTI:  case LEQI:  case ADDI:  case SUBI:  case MULTI:  case DIVI:    fprintf(f,"\t");    fprintf_value(p,f,&(i->arg));    break;#endif  default:    /* nothing */;  }  return 0;}#else/* kernel versions */int printk_addr(unsigned int addr) {  printk("%d.%d.%d.%d",NIPQUAD(addr));  return 0;}int printk_value_tag(TAG_T tag) {  switch(tag) {  case INTV: printk("INTV"); break;  case ADDRV: printk("ADDRV"); break;  case STRV: printk("STRV"); break;  case EXCV: printk("EXCV"); break;  case TUPLEV: printk("TUPLEV"); break;  case FLOATV: printk("FLOATV"); break;  default: printk("BOGUSV"); break;  }  return 0;}int printk_value(packet_t *p,value_t *val) {  void *heap = p->heap_min;  switch(GET_TAG(*val)) {    case INTV: printk("%d",GET_INT(*val)); break;    case ADDRV: {      uint32 addr;      GET_ADDR(addr,heap,*val);      printk_addr(addr);      break;    }    case FLOATV: {      float32 fv;      GET_FLOAT(fv,heap,*val);      printk("%d.%02d",(int)fv,(int)((fv - (int)fv) * 100));       break;    }    case STRV: {      heap_obj *_ho = (heap_obj *)((void *)heap + GET_OFFS(*val));      char *cp = (char *)&(_ho->s);      int i;      if (cp[_ho->len - 1] == (char)0xff) {	/* blob */	printk("|%d|",_ho->len);	break;      }      printk("\"");      for(i=0; i<_ho->len; i++) {	if (*cp == '\0') {	  break;	}	switch(*cp) {	case '"': printk("\\\""); break;	case '\\': printk("\\"); break;	case '\n': printk("\\n"); break;	case '\b': printk("\\b"); break;	case '\r': printk("\\r"); break;	case '\t': printk("\\t"); break;	default: 	  if (isprint(*cp)) {	    printk("%c",*cp);	  } else {	    printk("\\%03o",(int)*cp);	  }	  break;	}	cp++;      }      printk("\"");      break;    }    case EXCV:      printk("E_%d",GET_INT(*val)); break;    case TUPLEV: {      heap_obj *_ho = (heap_obj *)((void *)heap + GET_OFFS(*val));      int i;      printk("(");      for (i=0; i< _ho->len; i+= sizeof(value_t)) {	printk_value(p,(value_t *)&(_ho->s[i]));	if (i+sizeof(value_t) < _ho->len) printk(", ");      }      printk(")");      break;    }    default:      printk("<bogusv>");      break;  }  return 0;}int printk_opcode(OPCODE_T op) {  switch(op) {  case EXIT: printk("exit"); break;  case POP: printk("pop"); break;  case POPI: printk("popi"); break;  case PULL: printk("pull"); break;  case STORE: printk("store"); break;  case JI: printk("ji"); break;  case PAJ: printk("paj"); break;  case TPAJ: printk("tpaj"); break;  case BEZ: printk("bez"); break;  case BNE: printk("bne"); break;  case MKTUP: printk("mktup"); break;  case NTH: printk("nth"); break;  case LEN: printk("len"); break;  case ISTUP: printk("istup"); break;  case EQ: printk("eq"); break;  case NEQ: printk("neq"); break;  case GT: printk("gt"); break;  case GTI: printk("gti"); break;  case GEQ: printk("geq"); break;  case GEQI: printk("geqi"); break;  case LEQ: printk("leq"); break;  case LEQI: printk("leqi"); break;  case LT: printk("lt"); break;  case LTI: printk("lti"); break;  case ADD: printk("add"); break;  case ADDI: printk("addi"); break;  case SUB: printk("sub"); break;  case SUBI: printk("subi"); break;  case MULT: printk("mult"); break;  case MULTI: printk("multi"); break;  case DIV: printk("div"); break;  case DIVI: printk("divi"); break;  case MOD: printk("mod"); break;  case MODI: printk("modi"); break;  case NEG: printk("neg"); break;  case NOT: printk("not"); break;  case LNOT: printk("lnot"); break;  case AND: printk("and"); break;  case ANDI: printk("andi"); break;  case OR: printk("or"); break;  case ORI: printk("ori"); break;  case LSHL: printk("lshl"); break;  case LSHLI: printk("lshli"); break;  case RSHL: printk("rshl"); break;  case RSHLI: printk("rshli"); break;  case RSHA: printk("rsha"); break;  case RSHAI: printk("rshai"); break;  case XOR: printk("xor"); break;      case XORI: printk("xori"); break;      case SNET: printk("snet"); break;  case SNETI: printk("sneti"); break;  case BCAST: printk("bcast"); break;  case BCASTI: printk("bcasti"); break;  case ISX: printk("isx"); break;  case GETRB: printk("getrb"); break;  case GETSRC: printk("getsrc"); break;  case GETDST: printk("getdst"); break;  case GETSPT: printk("getspt"); break;  case HERE: printk("here"); break;  case ISHERE: printk("ishere"); break;  case ROUTE: printk("route"); break;  case RTDEV: printk("rtdev"); break;  case SEND: printk("send"); break;  case HOP: printk("hop"); break;/*    case SENDCK: printk("sendck"); break; *//*    case HOPCK: printk("hopck"); break; */  case FORW: printk("forw"); break;  case FORWTO: printk("forwto"); break;  case DEMUX: printk("demux"); break;  case DEMUXI: printk("demuxi"); break;  case PRINT: printk("print"); break;#ifndef SMALL_INSTRS  case PUSH: printk("push"); break;  case EQI: printk("eqi"); break;  case NEQI: printk("neqi"); break;#else  case PINT: printk("pint"); break;  case EQINT: printk("eqint"); break;  case NQINT: printk("nqint"); break;  case PADDR: printk("paddr"); break;  case EQADR: printk("eqadr"); break;  case NQADR: printk("nqadr"); break;  case PTUP: printk("ptup"); break;  case EQTUP: printk("eqtup"); break;  case NQTUP: printk("nqtup"); break;  case PEXC: printk("pexc"); break;  case EQEXC: printk("eqexc"); break;  case NQEXC: printk("nqexc"); break;  case PSTR: printk("pstr"); break;  case EQSTR: printk("eqstr"); break;  case NQSTR: printk("nqstr"); break;  case PFLT: printk("pflt"); break;  case EQFLT: printk("eqflt"); break;  case NQFLT: printk("nqflt"); break;      case FGTI: printk("fgti"); break;  case FGEQI: printk("fgeqi"); break;  case FLEQI: printk("fleqi"); break;  case FLTI: printk("flti"); break;  case FADDI: printk("faddi"); break;  case FSUBI: printk("fsubi"); break;  case FMULI: printk("fmulti"); break;  case FDIVI: printk("fdivi"); break;  case GETLD: printk("getld"); break;#endif  case SVCV: printk("svcv"); break;  case CALLS: printk("calls"); break;  default: printk("invalid opcode %d\n",op);  }  return 0;}int printk_instr(packet_t *p, instr_t *i) {  printk_opcode(GET_OP(*i));  switch(GET_OP(*i)) {    /* int literals */#ifdef SMALL_INSTRS  case PINT:  case EQINT:  case NQINT:  case GTI:  case GEQI:  case LTI:  case LEQI:  case ADDI:  case SUBI:  case MULTI:  case DIVI:#endif  case POPI:  case PULL:  case STORE:  case PAJ:  case TPAJ:  case JI:  case BEZ:  case BNE:  case MKTUP:  case NTH:  case MODI:  case ANDI:  case ORI:  case LSHLI:  case RSHLI:  case RSHAI:  case XORI: {    value_t lit;    COPY_LIT(lit,INTV,*i);    printk("\t");    printk_value(p,&lit);    break;  }    /* addr literals */#ifdef SMALL_INSTRS  case PADDR:  case EQADR:  case NQADR:#endif  case SNETI:  case BCASTI: {    value_t lit;    COPY_LIT(lit,ADDRV,*i);    printk("\t");    printk_value(p,&lit);    break;  }    /* string literals */#ifdef SMALL_INSTRS  case PSTR:  case EQSTR:  case NQSTR:#endif  case CALLS:  case SVCV: {    value_t lit;    COPY_LIT(lit,STRV,*i);    printk("\t");    printk_value(p,&lit);    break;  }#ifdef SMALL_INSTRS    /* tuple literals */  case PTUP:  case EQTUP:  case NQTUP: {    value_t lit;    COPY_LIT(lit,TUPLEV,*i);    printk("\t");    printk_value(p,&lit);    break;  }    /* exception literals */  case PEXC:  case EQEXC:  case NQEXC: {    value_t lit;    COPY_LIT(lit,EXCV,*i);    printk("\t");    printk_value(p,&lit);    break;  }    /* float literals */  case PFLT:  case EQFLT:  case NQFLT:  case FGEQI:  case FLEQI:  case FLTI:  case FGTI:  case FADDI:  case FSUBI:  case FMULI:  case FDIVI: {    value_t lit;    COPY_LIT(lit,FLOATV,*i);    printk("\t");    printk_value(p,&lit);    break;  }#else    /* polymorphic literals */  case PUSH:  case EQI:  case NEQI:  case GTI:  case GEQI:  case LTI:  case LEQI:  case ADDI:  case SUBI:  case MULTI:  case DIVI:    printk("\t");    printk_value(p,&(i->arg));    break;#endif  default:    /* nothing */;  }  return 0;}#endif /* !__KERNEL__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -