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; }
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; }