Changeset 2287
- Timestamp:
- Apr 16, 2008, 12:11:35 AM (15 years ago)
- Location:
- research/2008-displacement
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
research/2008-displacement/main-cpushare
r2286 r2287 18 18 sys.exit(-1) 19 19 mode = sys.argv[2][1] 20 done = 0 20 21 source = sys.argv[3:] 21 22 result = [False] * len(source) … … 35 36 global todo, source 36 37 if todo >= len(source): 37 return # We're finished... FIXME: a process is stuck38 return # We're finished... FIXME: is the transaction kept stuck? 38 39 self.index = todo 39 40 todo += 1 40 41 gd.gdMaxColors = 256 * 256 * 256 41 42 im = gd.image(source[self.index]) 42 # Send mode 43 self.protocol.sendString(PROTO_SECCOMP_FORWARD + mode) 43 # Send argument count 44 self.protocol.sendString(PROTO_SECCOMP_FORWARD + chr(3)) 45 # Send arguments 46 msg = chr(3) 47 msg += "bytecode\0" 48 msg += "-1\0" 49 msg += source[self.index] + "\0" 50 self.protocol.sendString(PROTO_SECCOMP_FORWARD + msg) 44 51 # Send image size 45 52 (self.w, self.h) = (w, h) = im.size() … … 65 72 if ord(self.answer[-1]) != 0: 66 73 return 67 global result74 global done, result 68 75 result[self.index] = self.answer[:-1] 69 76 print self.answer[:-1], 70 77 self.protocol.sendString(PROTO_SECCOMP_SUCCESS) 71 # the PROTO_SECCOMP_SUCCESS probably won't have a chance72 # to go out but it doesn't matter because we'll disconnect73 # not just this but all other seccomp state machines too78 done += 1 79 if done < len(source): 80 return 74 81 from twisted.internet import reactor 75 82 reactor.stop() -
research/2008-displacement/main.c
r2286 r2287 40 40 void bytecode(unsigned char * mem, int heap_size, int stack_size) 41 41 { 42 char mode[] = "-0"; 43 char *argv[] = { "program", mode, "arg" }; 42 char args[10][1024]; 43 char *argv[] = { args[0], args[1], args[2], args[3], args[4], 44 args[5], args[6], args[7], args[8], args[9] }; 45 int i, argc; 44 46 char c; 45 47 46 if(sys_read(0, mode + 1, 1) != 1)48 if(sys_read(0, &c, 1) != 1) 47 49 sys_exit(-5); 48 49 main(sizeof(argv)/sizeof(*argv), argv); 50 argc = (unsigned char)c; 51 52 for(i = 0; i < argc; i++) 53 { 54 char *p = argv[i]; 55 do 56 if(sys_read(0, p, 1) != 1) 57 sys_exit(-5); 58 while(*p++); 59 } 60 61 main(argc, argv); 50 62 51 63 c = 0; … … 81 93 } while(0) 82 94 83 static void msg(const char *f, ...) 84 { 85 va_list args; 86 va_start(args, f); 95 static void out(FILE *stream, const char *f, va_list args) 96 { 87 97 #ifdef BYTECODE 88 98 static char const *hex2char = "0123456789abcdef"; … … 142 152 else if(f[0] == 'g') 143 153 { 144 double g = va_arg(args, double), h = 9.9f; 145 int i; 146 if(g < 0.f) 147 { 148 sys_write(1, "-", 1); 149 g = -g; 150 } 154 double g = va_arg(args, double), h = 0.0000001; 155 int i = g; 156 WRITE_INT(i, 10); 151 157 for(i = 0; i < 7; i++) 152 158 { 153 sys_write(1, hex2char + (int)g, 1); 159 g = (g - (int)g) * 10; 160 h *= 10; 161 if(g < h) 162 break; 154 163 if(i == 0) 155 164 sys_write(1, ".", 1); 156 g = (g - (int)g) * 10; 157 h = h / 10.f; 158 if(g < h) 159 break; 165 sys_write(1, hex2char + (int)g, 1); 160 166 } 161 167 } … … 197 203 } 198 204 #else 199 vprintf(f, args); 200 fflush(stdout); 201 #endif 205 vfprintf(stream, f, args); 206 fflush(stream); 207 #endif 208 } 209 210 static void err(const char *f, ...) 211 { 212 va_list args; 213 va_start(args, f); 214 out(stderr, f, args); 215 va_end(args); 216 } 217 218 static void msg(const char *f, ...) 219 { 220 va_list args; 221 va_start(args, f); 222 out(stdout, f, args); 202 223 va_end(args); 203 224 } … … 753 774 } 754 775 755 fprintf(stderr,"did %i changes\n", changes);776 err("did %i changes\n", changes); 756 777 757 778 if(changes == 0) … … 829 850 static void usage(char *argv[]) 830 851 { 831 fprintf(stderr, "Usage: %s <mode> [ARGS...]\n", argv[0]); 832 fprintf(stderr, "Allowed modes:\n"); 833 fprintf(stderr, " -1 <src> raster FS displacement study on src\n"); 834 fprintf(stderr, " -2 <src1> <src2> raster FS displacement study on blends of src1 and src2\n"); 835 fprintf(stderr, " -3 <src> quick (a,b,c,d) ED kernel analysis on src\n"); 836 fprintf(stderr, " -4 <src> exhaustive (a,b,c,d) ED kernel analysis on src\n"); 837 fprintf(stderr, " -5 <src> exhaustive displacement study on src\n"); 852 msg("Usage: %s <mode> [ARGS...]\n", argv[0]); 853 msg("Allowed modes:\n"); 854 msg(" -1 <src> raster FS displacement study on src\n"); 855 msg(" -2 <src1> <src2> raster FS displacement study on blends of src1 and src2\n"); 856 msg(" -3 <src> quick (a,b,c,d) ED kernel analysis on src\n"); 857 msg(" -4 <src> exhaustive (a,b,c,d) ED kernel analysis on src\n"); 858 msg(" -5 <src> exhaustive displacement study on src\n"); 859 msg(" -6 <src> restrained (a,b,c,d) ED kernel analysis on src\n"); 860 msg(" -7 <src> restrained displacement study on src\n"); 838 861 } 839 862 … … 845 868 if(argc < 2) 846 869 { 847 fprintf(stderr,"%s: too few arguments\n", argv[0]);870 err("%s: too few arguments\n", argv[0]); 848 871 usage(argv); 849 872 return EXIT_FAILURE; … … 852 875 if(argv[1][0] != '-' || !(mode = atoi(argv[1] + 1))) 853 876 { 854 fprintf(stderr,"%s: invalid mode `%s'\n", argv[0], argv[1]);877 err("%s: invalid mode `%s'\n", argv[0], argv[1]); 855 878 usage(argv); 856 879 return EXIT_FAILURE;
Note: See TracChangeset
for help on using the changeset viewer.