int main() { char buf[4]; klee_make_symbolic(buf, sizeof buf); klee_prefer_cex(buf, buf[0]=='H'); klee_prefer_cex(buf, buf[1]=='i'); klee_prefer_cex(buf, buf[2]=='\0'); return 0; }
int main() { char buf[4]; klee_make_symbolic(buf, sizeof buf, "buf"); // CHECK: Hi\x00\x00 klee_prefer_cex(buf, buf[0]=='H'); klee_prefer_cex(buf, buf[1]=='i'); klee_prefer_cex(buf, buf[2]=='\0'); klee_prefer_cex(buf, buf[3]=='\0'); return 0; }
int main() { int x = klee_range(0, 256, "x"); if (x == 17) { f0(); } else if (x == 32) { f1(); } else if (x == 99) { f2(); } else { klee_prefer_cex(&x, x == 0); f3(); } 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_prefer_cex(s, !(s->st_mode & ~(S_IFMT | 0777))); klee_prefer_cex(s, s->st_dev == defaults->st_dev); klee_prefer_cex(s, s->st_rdev == defaults->st_rdev); klee_prefer_cex(s, (s->st_mode&0700) == 0600); klee_prefer_cex(s, (s->st_mode&0070) == 0020); klee_prefer_cex(s, (s->st_mode&0007) == 0002); klee_prefer_cex(s, (s->st_mode&S_IFMT) == S_IFREG); klee_prefer_cex(s, s->st_nlink == 1); klee_prefer_cex(s, s->st_uid == defaults->st_uid); klee_prefer_cex(s, s->st_gid == defaults->st_gid); klee_prefer_cex(s, s->st_blksize == 4096); klee_prefer_cex(s, s->st_atime == defaults->st_atime); klee_prefer_cex(s, s->st_mtime == defaults->st_mtime); klee_prefer_cex(s, s->st_ctime == defaults->st_ctime); s->st_size = dfile->size; s->st_blocks = 8; dfile->stat = s; }