рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг ASCII рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ KLEE рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд╡реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдирд┐рд╖реНрдкрд╛рджрди рддрдХрдиреАрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рддрдиреЗ рд╕рд╣реА рдирд┐рд░реНрдгрдп рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ?

рднреВрд▓рднреБрд▓реИрдпрд╛
рднреВрд▓рднреБрд▓реИрдпрд╛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ C рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдХреЛрдб рдЖрдк
рдпрд╣рд╛рдБ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ
рд╣реИрдВ ред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЦреЗрд▓ рдХрджрдо (рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ, рдбреА - рджрд╛рдИрдВ рдУрд░, рдбрдмреНрд▓реНрдпреВ - рдЕрдк рдФрд░ рдПрд╕ - рдбрд╛рдЙрди) рдХреЗ рдПрдХ рдХреНрд░рдо рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
рдкреНрд▓реЗрдпрд░ рдкреЙрдЬрд╝: 1x4
Iteration рд╕рдВред 2. рдХрд╛рд░реНрд░рд╡рд╛рдИ: рдПрд╕ред
+ - + --- + --- +
| рдПрдХреНрд╕ | | # |
| рдПрдХреНрд╕ | - + | |
| рдПрдХреНрд╕ | | | |
| рдПрдХреНрд╕ + - | | |
| | |
+ ----- + --- +
рдЕрдкрдиреА рд╕реНрдкрд╖реНрдЯ рд╕рд╛рджрдЧреА рдХреЗ рдмрд╛рд╡рдЬреВрдж, рднреВрд▓рднреБрд▓реИрдпрд╛ рдПрдХ рд░рд╣рд╕реНрдп рдХреЛ рдЫрд┐рдкрд╛рддреА рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред
рдХреНрд▓реА
KLEE LLVM рдмрд┐рдЯрдХреЛрдб рдХрд╛ рдЪрд░рд┐рддреНрд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдпрд╣ рдХрд┐рд╕реА рднреА рдлреНрд░рдВрдЯ рдПрдВрдб рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рд╛рд░ рдЗрд╕ рддрдереНрдп рд╕реЗ рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ рдХрд┐ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рднреА рдЗрдирдкреБрдЯ рдореВрд▓реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВред рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди, рдирдП рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдЪрд░ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЙрдирдХреЗ рдореВрд▓реНрдп рдПрдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдСрдкрд░реЗрдВрдб рдХреЗ рд╕рд╛рде рдХреБрдЫ рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ), рд╕рд╛рде рд╣реА рд╕рд╛рде рдореМрдЬреВрджрд╛ (рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдкрде рдкрд░ рд╢рд╛рдЦрд╛рдПрдВ)ред рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрдПрд▓рдИ рдПрд╕рдПрдордЯреА рд╕реЙрд▓реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ рдХрд┐, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкрде рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдпрджрд┐ рдЖрдк рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк
рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ
рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛
рдпрд╣ рднреА рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдкреЛрд╕реНрдЯ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИ - рдПрдХ рдЪрд░рд┐рддреНрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдЦрд┐рд▓рд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреЗрдПрд▓рдИ рдХреИрд╕реЗ рд╕рдорд╛рдзрд╛рди рдкрд╛рддрд╛ рд╣реИред
рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ
рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЛ рд╡рд░реНрдгреЛрдВ рдХреЗ рджреНрд╡рд┐-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
#define H 7 #define W 11 char maze[H][W] = { "+-+---+---+", "| | |#|", "| | --+ | |", "| | | | |", "| +-- | | |", "| | |", "+-----+---+" };
рдбреНрд░рд╛ () рдХрд╛ рдХрд╛рд░реНрдп рд╕реНрдХреНрд░реАрди рдкрд░ рд╣рдорд╛рд░реЗ рд╕рд░рдгреА рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред
void draw () { int i, j; for (i = 0; i < H; i++) { for (j = 0; j < W; j++) printf ("%c", maze[i][j]); printf ("\n"); } printf ("\n"); }
рдореБрдЦреНрдп () рдлрд╝рдВрдХреНрд╢рди рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рд╕реНрдерд┐рддрд┐, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдХрд░реНрддрд╛ рдФрд░ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ 28-рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдлрд┐рд░, рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ (1,1) рдкрд░ рд╕реЗрдЯ рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдХреНрд░реЙрд╕ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
int main (int argc, char *argv[]) { int x, y;
рд╣рдо рд╕реНрдЯрдб рд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ рдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдиреЗ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ред
read(0,program,ITERS);
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪрдХреНрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреБрд░рд╛рдиреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реЗ рдПрдХ рдирдП рд╕реНрдерд╛рди рдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред
while(i < ITERS) { ox = x;
рдпрджрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдЕрдВрдд рддрдХ рдкрд╣реБрдБрдЪ рдЧрдпрд╛ рд╣реИ - рдЙрд╕реЗ рдмрдзрд╛рдИред
if (maze[y][x] == '#') { printf ("You win!\n"); printf ("Your solution \n",program); exit (1); }
рдЕрдЧрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реИ - рд╣рдо рдЙрд╕ рдЬрдЧрд╣ рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЦрдбрд╝реЗ рдереЗред
if (maze[y][x] != ' ' && !((y == 2 && maze[y][x] == '|' && x > 0 && x < W))) { x = ox; y = oy; }
рдпрджрд┐ рд╡реЗ рджреАрд╡рд╛рд░ рд╕реЗ рдЯрдХрд░рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЦрд┐рд▓рд╛рдбрд╝реА рд╣рд╛рд░ рдЬрд╛рддрд╛ рд╣реИред
if (ox==x && oy==y){ printf("You loose\n"); exit(-2); }
рдЦреИрд░, рдЕрдЧрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖ, рддреЛ рд╣рдордиреЗ рд╕рд┐рд░реНрдл рдПрдХ рдХрджрдо рдЙрдард╛рдпрд╛ред рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рддрд╕реНрд╡реАрд░ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ рдФрд░ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓реМрдЯрддреЗ рд╣реИрдВред
maze[y][x]='X'; draw ();
рдЪрд▓реЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ
рдпрджрд┐ рдЖрдк рдЕрдЪрд╛рдирдХ рдЦреБрдж рдХреЛ рдЧреЗрдо рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдорд┐рд▓реЗрдЧрд╛: ssssddddwwaawwddddssssddwwww

рдФрд░ рдЕрдм KLEE рдХреЗ рд╕рд╛рде
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ LLVM, рдЕрдиреБрд╡рд╛рджрдХ C -> LLVM IR (llvm-gcc рдпрд╛ clang) рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, KLEE рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдпреЗ рдкреИрдХреЗрдЬ рд╣реИрдВред
LLVM рдмрд┐рдЯрдХреЛрдб рдореЗрдВ mace.c рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
$ llvm-gcc -c тАУemit-llvm maze.c -o maze.bc
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдк llvm-gcc рдХреЗ рдмрдЬрд╛рдп рдХреНрд▓реИрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ maze.bc рдлрд╝рд╛рдЗрд▓ рдорд┐рд▓реА, рдЬреЛ рднреВрд▓рднреБрд▓реИрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдмрд┐рдЯрдХреЛрдб рд╣реИред рдЗрд╕реЗ LLVM рджреБрднрд╛рд╖рд┐рдпрд╛ рдкрд░ рднреА рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
$ рд▓реНрд▓реА рднреВрд▓рднреБрд▓реИрдпрд╛ред рдмреАрд╕реА
KLEE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреБрдЫ рдЪрд░ рдХреЛ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдореБрдЦреНрдп () рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рд░рдгреА рд╣реЛрдЧреАред рддреЛ, рд▓рд╛рдЗрди рдХреА рдЬрдЧрд╣
read(0,program,ITERS);
рдкрд░
klee_make_symbolic(program,ITERS,"program");
рдФрд░ KLEE рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВ
#include <klee/klee.h>
рдЕрдм KLEE рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдХрд┐рд╕реА рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рд░реНрдЧ (рдФрд░ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЗ рдЧрд▓рд┐рдпрд╛рд░реЗ) рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдпреЗ рд░рд╛рд╕реНрддреЗ рдХрд┐рд╕реА рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрдлрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд▓рд┐рдП), рддреЛ KLEE рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рд╣рдо рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ
$ klee maze.bc
рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рджреЗрдЦреЗрдВ:

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд┐рдЫрд▓реЗ 3 рдкреЛрд╕реНрдЯ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, KLEE рдиреЗ 321 рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рд╛рд╕реНрддреЗ рдкрд╛рдПред рд╕рдЪ рд╣реИ, рдпрд╣ рдПрдХ 321 рд╕рд╣реА рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд╣реИред
KLEE: рдХрд┐рдпрд╛ рдЧрдпрд╛: рдХреБрд▓ рдирд┐рд░реНрджреЗрд╢ = 112773
KLEE: рдХрд┐рдпрд╛: рдкреВрд░реНрдг рдкрде = 321
KLEE: рдХрд┐рдпрд╛: рдЙрддреНрдкрдиреНрди рдкрд░реАрдХреНрд╖рдг = 318
рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд░рд┐рдкреЛрд░реНрдЯ klee-last рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рд╣реЗрдЬреА рдЬрд╛рддреА рд╣реИ
$ ls klee-last /
рдЕрд╕реЗрдореНрдмрд▓реАред рд╕рднреА test000078.ktest test000158.ktest
рдЬрд╛рдирдХрд╛рд░реА test000079.ktest test000159.ktest
messages.txt test000080.ktest test000160.ktest
run.istats test000081.ktest test000161.ktest
run.stats test000082.ktest test000162.ktest
test000001.ktest test000083.ktest test000163.ktest
test000075.ktest test000155.ktest рдЪреЗрддрд╛рд╡рдиреА
рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг ktest- рдЙрдкрдХрд░рдг рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
$ ktest-tool klee-last / test000222.ktest
ktest рдлрд╝рд╛рдЗрд▓: 'klee-last / test000222.ktest'
args: ['maze_klee.o']
рд╕рдВрдЦреНрдпрд╛ рд╡рд╕реНрддреБрдУрдВ: 1
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдирд╛рдо: 'рдкреНрд░реЛрдЧреНрд░рд╛рдо'
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдЖрдХрд╛рд░: 29
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдбреЗрдЯрд╛: 'ssssddddwwawwdddssssddwwwd \ x00'
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк рдмрд╕ рдпрд╣рд╛рдБ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдорд╛рди рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдорд╛рди рдХреЛ рднреВрд▓рднреБрд▓реИрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдкрд╛рд╕ рдХрд░рдХреЗ рдЯреЗрд╕реНрдЯ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд░рд╛рд╕реНрддреЗ рдорд┐рд▓реЗред рд▓реЗрдХрд┐рди рд╕рднреА рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдХреЛ рди рджреЗрдЦреЗрдВ! рд╣рдореЗрдВ KLEE рдХреЛ рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдЖрдк рдЬреАрддрддреЗ рд╣реИрдВ!"ред
KLEE рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ klee_assert () рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╕реА рдореЗрдВ рд╕рдорд╛рдирд╛рд░реНрдереА рдореБрдЦрд░ () рдХреЗ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рдмреВрд▓рд┐рдпрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░, рдпрджрд┐ рдЧрд▓рдд рд╣реИ, рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдбреЙрдХреНрдЯрд░ рдиреЗ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдерд╛ред
рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝реЗрдВ
printf ("You win!\n");
рдмрд┐рдирд╛ рд╢рд░реНрдд рдХреЙрд▓ klee_assert ()
printf ("You win!\n"); klee_assert(0);
рдЕрдм KLEE рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐, klee_assert (!) рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдЙрдирдХреЗ рдирд╛рдо рдореЗрдВ .err рд╣реЛрдЧрд╛:
$ ls -1 klee-last / | grep -A2 -B2 рдЗрд░реЗрдЯ рдХрд░реЗрдВ
test000096.ktest
test000097.ktest
test000098.assert.err
test000098.ktest
test000098.pc
рдЖрдЗрдП рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рджреЗрдЦреЗрдВред
$ ktest-tool klee-last / test000098.ktest
ktest рдлрд╝рд╛рдЗрд▓: 'klee-last / test000098.ktest'
args: ['maze_klee.o']
рд╕рдВрдЦреНрдпрд╛ рд╡рд╕реНрддреБрдУрдВ: 1
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдирд╛рдо: 'рдкреНрд░реЛрдЧреНрд░рд╛рдо'
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдЖрдХрд╛рд░: 29
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдбреЗрдЯрд╛: 'sddwddddssssddwwww \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00'
рддреЛ, рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд KLEE рд╕рдорд╛рдзрд╛рди
sddwddddssssddwwww рд╣реИрдЕрд░реЗ рдореБрдЭреЗ рдЬрд╛рдиреЗ рджреЛ рдпрд╣ рдЫреЛрдЯрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ! рдЖрдЗрдП рдЗрд╕реЗ рдЕрд╕рд▓реА рдЪрдХреНрд░рд╡реНрдпреВрд╣ рдкрд░ рдЖрдЬрдорд╛рддреЗ рд╣реИрдВ:

рдореБрдЭреЗ рдкрддрд╛ рдерд╛ !!! рднреВрд▓рднреБрд▓реИрдпрд╛ рдореЗрдВ рдирдХрд▓реА рджреАрд╡рд╛рд░реЗрдВ рд╣реИрдВ! рдФрд░ KLEE рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдирдХреЗ рдкрд╛рд╕ рд╕реЗ рдЧреБрдЬрд░рд╛! рд▓реЗрдХрд┐рди рд╣реЗ, рдЕрдЧрд░ рдХреЗрдПрд▓рдИ рдХреЛ рд╕рднреА рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдереЗ, рддреЛ рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рд╕реНрдерд╛рди рдХрд╣рд╛рдВ рд╣реИ? KLEE рдиреЗ рдЙрд╕реЗ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЦреЛрдЬрд╛?
рдареАрдХ рд╣реИ, рдЖрдо рддреМрд░ рдкрд░ рддреНрд░реБрдЯрд┐ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдпрджрд┐ рд╣рдо рд╕реНрд╡рдпрдВ рддреНрд░реБрдЯрд┐ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо 10,000 рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
$ klee -emit-all-рддреНрд░реБрдЯрд┐рдпрд╛рдБ maze_klee.o
рд╣рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:

рдЕрдм рд╣рдореЗрдВ 4 рдкрд░реАрдХреНрд╖рдг рдорд┐рд▓реЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЗ 4 рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:
$ ktest-tool klee-last / test000097.ktest
ktest рдлрд╝рд╛рдЗрд▓: 'klee-last / test000097.ktest'
args: ['maze_klee.o']
рд╕рдВрдЦреНрдпрд╛ рд╡рд╕реНрддреБрдУрдВ: 1
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдирд╛рдо: 'рдкреНрд░реЛрдЧреНрд░рд╛рдо'
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдЖрдХрд╛рд░: 29
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдбреЗрдЯрд╛: 'sddwddddsddw \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00'
$ ktest-tool klee-last / test000136.ktest
ktest рдлрд╝рд╛рдЗрд▓: 'klee-last / test000136.ktest'
args: ['maze_klee.o']
рд╕рдВрдЦреНрдпрд╛ рд╡рд╕реНрддреБрдУрдВ: 1
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдирд╛рдо: 'рдкреНрд░реЛрдЧреНрд░рд╛рдо'
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдЖрдХрд╛рд░: 29
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдбреЗрдЯрд╛: 'sddwddddssssddwwww \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00'
$ ktest-tool klee-last / test000239.ktest
ktest рдлрд╝рд╛рдЗрд▓: 'klee-last / test000239.ktest'
args: ['maze_klee.o']
рд╕рдВрдЦреНрдпрд╛ рд╡рд╕реНрддреБрдУрдВ: 1
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдирд╛рдо: 'рдкреНрд░реЛрдЧреНрд░рд╛рдо'
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдЖрдХрд╛рд░: 29
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдбреЗрдЯрд╛: 'ssssddddwwaawwddddsddw \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00'
$ ktest-tool klee-last / test000268.ktest
ktest рдлрд╝рд╛рдЗрд▓: 'klee-last / test000268.ktest'
args: ['maze_klee.o']
рд╕рдВрдЦреНрдпрд╛ рд╡рд╕реНрддреБрдУрдВ: 1
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдирд╛рдо: 'рдкреНрд░реЛрдЧреНрд░рд╛рдо'
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдЖрдХрд╛рд░: 29
рдСрдмреНрдЬреЗрдХреНрдЯ 0: рдбреЗрдЯрд╛: 'ssssddddwwaawwddddssssddwwww \ x00'
рддреЛ, рдЗрд╕ рднреВрд▓рднреБрд▓реИрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди:
1.
ssssddddwwaawwddddssssddwwww2.
ssssddddwwaawwddddsddw3.
sddwddddssssddwwww4.
sddwddddsddw