Exemple #1
0
int main() {
  int x = klee_int("x");
  klee_assume(x > 10);
  klee_assume(x < 20);

  assert(!klee_is_symbolic(klee_get_value_i32(x)));
  assert(klee_get_value_i32(x) > 10);
  assert(klee_get_value_i32(x) < 20);

  return 0;
}
int main() {
  unsigned char a;

  klee_make_symbolic(&a, sizeof a);

  // demand was firing here because an invalid constant
  // value was being created when implied value did not
  // subtract using the proper type (so overflowed into
  // invalid bits)
  if (util_make_concat2(a+0xCD,0xCD) == 0xABCD) { 
    assert(!klee_is_symbolic(a));
    printf("add constant case: %d\n", a);
  }

  if (util_make_concat2(0x0B-a,0xCD) == 0xABCD) { 
    assert(!klee_is_symbolic(a));
    printf("sub constant case: %d\n", a);
  }

  return 0;
}
Exemple #3
0
static void __create_new_dfile(exe_disk_file_t *dfile, unsigned size, 
                               const char *name, struct stat64 *defaults) {
  struct stat64 *s = malloc(sizeof(*s));
  const char *sp;
  char sname[64];
  for (sp=name; *sp; ++sp)
    sname[sp-name] = *sp;
  memcpy(&sname[sp-name], "-stat", 6);

  assert(size);

  dfile->size = size;
  dfile->contents = malloc(dfile->size);
  klee_make_symbolic(dfile->contents, dfile->size, name);
  
  klee_make_symbolic(s, sizeof(*s), sname);

  /* For broken tests */
  if (!klee_is_symbolic(s->st_ino) && 
      (s->st_ino & 0x7FFFFFFF) == 0)
    s->st_ino = defaults->st_ino;
  
  /* Important since we copy this out through getdents, and readdir
     will otherwise skip this entry. For same reason need to make sure
     it fits in low bits. */
  klee_assume((s->st_ino & 0x7FFFFFFF) != 0);

  /* uclibc opendir uses this as its buffer size, try to keep
     reasonable. */
  klee_assume((s->st_blksize & ~0xFFFF) == 0);

  klee_posix_prefer_cex(s, !(s->st_mode & ~(S_IFMT | 0777)));
  klee_posix_prefer_cex(s, s->st_dev == defaults->st_dev);
  klee_posix_prefer_cex(s, s->st_rdev == defaults->st_rdev);
  klee_posix_prefer_cex(s, (s->st_mode&0700) == 0600);
  klee_posix_prefer_cex(s, (s->st_mode&0070) == 0020);
  klee_posix_prefer_cex(s, (s->st_mode&0007) == 0002);
  klee_posix_prefer_cex(s, (s->st_mode&S_IFMT) == S_IFREG);
  klee_posix_prefer_cex(s, s->st_nlink == 1);
  klee_posix_prefer_cex(s, s->st_uid == defaults->st_uid);
  klee_posix_prefer_cex(s, s->st_gid == defaults->st_gid);
  klee_posix_prefer_cex(s, s->st_blksize == 4096);
  klee_posix_prefer_cex(s, s->st_atime == defaults->st_atime);
  klee_posix_prefer_cex(s, s->st_mtime == defaults->st_mtime);
  klee_posix_prefer_cex(s, s->st_ctime == defaults->st_ctime);

  s->st_size = dfile->size;
  s->st_blocks = 8;
  dfile->stat = s;
}
int main(int argc, char **argv) {
  struct sockaddr_in server_addr, client_addr;
  socklen_t client_len;
  int nread;
  char buf[16];
  
  int ufd = socket(AF_INET, SOCK_DGRAM, 0);
  if (ufd < 0) {
    perror("socket() returned error");
    exit(1);
  }

  server_addr.sin_family = AF_INET;
  server_addr.sin_addr.s_addr = INADDR_ANY;
  server_addr.sin_port = htons(1080);

  int r = bind(ufd, (const struct sockaddr *) &server_addr, sizeof(server_addr));
  if (r < 0) {
     perror("bind() returned error");
     exit(1);
  } 

  nread = recv(ufd, buf, sizeof(buf), 0);
  if (nread < 0) {
     perror("recv() returned error");
     exit(1);
  }

  assert(nread == 16);
  if (klee_is_symbolic(buf[0])) {
    printf("Received symbolic data. Failed\n");
  }
  assert(memcmp(buf + 0, "\xAA\xAA\xAA\xAA", 4) == 0);
  assert(memcmp(buf + 4, "okay\n\0\7\37\007\xa\x7f.", 12) == 0);

  close(ufd);

  int lfd = socket(AF_INET, SOCK_STREAM, 0);
  if (lfd < 0) {
    perror("socket() returned error");
    exit(1);
  }

  r = bind(lfd, (const struct sockaddr *) &server_addr, sizeof(server_addr));
  if (r < 0) {
     perror("bind() returned error");
     exit(1);
  } 

  r = listen(lfd, 5);
  if (r < 0) {
     perror("listen() returned error");
     exit(1);
  } 

  client_len = sizeof(client_addr);  
  int cfd = accept(lfd, (struct sockaddr *) &client_addr, &client_len);
  if (cfd < 0) {
     perror("accept() returned error");
     exit(1);
  }

  nread = recv(cfd, buf, sizeof(buf), 0);
  if (nread < 0) {
     perror("recv() returned error");
     exit(1);
  }

  assert(nread == 16);
  assert(memcmp(buf + 0, "\xBB\xBB\xBB\xBB", 4) == 0);
  assert(memcmp(buf + 4, "\xaokay\n\007\37\7\0\x7f.", 12) == 0);

  close(cfd);
  close(lfd);

  printf("Success\n");

  return 0;
}