// gcc pwnable.c #include  #include  #include  #include  #include  long compute(int c) {  long i = 0;  while (c > 1) {  i++;  if (c%2 == 0) c /= 2;  else c = 3*c + 1;  }  return i; } int main() {  int uid = 0;  void* buffer = mmap(NULL, 0x1000, PROT_WRITE | PROT_EXEC, MAP_ANON | MAP_PRIVATE, -1, 0);  puts("Welcome to AIC Factory Terminal.");  puts("WARNING: The power system is about to reach its capacity limit.");  puts("WARNING: To prevent draining, your power usage for this session will be limited.");  puts("Now waiting for input.");  ssize_t input_size = read(STDIN_FILENO, buffer, 0x1000);  if (input_size > 0) {  long long accu = 0;  unsigned char *buf_ptr = (unsigned char *)buffer;  for (int i = 0; i < input_size; i++) {  long cur = compute(buf_ptr[i]);  // printf("%ld %d\n", cur, buf_ptr[i]);  if (cur > 35) {  puts("Consuming too much computational power. Aborting...");  exit(1);  }  accu += cur;  }  // Length limit perhaps  if (accu > 200) {  puts("Accumulative power usage is too high. Aborting...");  exit(1);  }  } else {  puts("Error reading input.");  }  puts("Now executing...");  ((void (*)(void))buffer)();  if (uid == 0x1337) {  puts("Power user detected. Granting full access...");  }  return 0; }