📄 snapdis.c
字号:
/* snap-1.0. Copyright (C) 2000 by Jonathan T. Moore and Michael Hicks. * * snapdis.c : SNAP disassembler. Goes from wire-format back to * (ascii) SNAP assembly language. * * $Id: snapdis.c,v 1.2 2003/09/17 11:26:10 tmoerlan Exp $ */#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <string.h>#include <fcntl.h>#include <unistd.h>#include "../lib/bytecode.h"#include "../lib/packet.h"#include "../lib/io.h"#include "../lib/memalloc.h"#include "../lib/d_printf.h"int infd; /* input file descriptor */FILE *outfile; /* output file pointer */extern char *basename(const char *);void parse_cmdline(int argc, char **argv);int main(int argc, char **argv) { buffer_t buf; packet_t *p; int packet_lenb; d_printf(10,"%s:%d: starting up\n",__FILE__,__LINE__); outfile = stdout; parse_cmdline(argc,argv); packet_lenb = file_to_str(infd,&buf); p = unmarshal_packet(buf.s,packet_lenb,buf.lenb); if (p != NULL) { fprintf_packet(outfile,p); fflush(outfile); return(0); } else return(1);}void usage(int argc, char **argv) { printf("usage: %s [-?] [-o outfile] infile\n",basename(argv[0])); printf("\t-? : print this help\n"); printf("\t-o : set the output file name (default = stdout)\n");}void parse_cmdline(int argc, char **argv) { char *opts = "?o:"; char c; int args_expected = 1; int args_processed = 0; int argidx; char *outfilename; char *infilename; while((c = getopt(argc,argv,opts)) != EOF) { switch(c) { case '?': usage(argc,argv); exit(1); case 'o': outfilename = optarg; if (strcmp(outfilename,"-") != 0) { outfile = fopen(outfilename,"w"); if (outfile == NULL) { fprintf(stderr,"%s: unable to open file \"%s\" for output\n", basename(argv[0]),outfilename); fflush(stderr); exit(1); } } break; } } argidx = optind; while(args_processed < args_expected) { if (argidx >= argc) { /* missing arguments */ printf("%s: missing argument(s)\n",basename(argv[0])); usage(argc,argv); exit(1); } switch(args_processed) { case 0: infilename = argv[argidx]; if (strcmp(infilename,"-") != 0) { infd = open(infilename,O_RDONLY); if (infd < 0) { fprintf(stderr,"%s: unable to open file \"%s\" for input\n", basename(argv[0]),infilename); fflush(stderr); exit(1); } } break; } argidx++; args_processed++; } if (argidx < argc) { /* extra arguments */ printf("%s: extra argument(s)\n",basename(argv[0])); usage(argc,argv); exit(1); } return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -