Slide 1

Slide 1 text

ChickenVM

Slide 2

Slide 2 text

@igorwesome

Slide 3

Slide 3 text

not about chicken scheme

Slide 4

Slide 4 text

drinking game

Slide 5

Slide 5 text

why did the chicken cross the road?

Slide 6

Slide 6 text

what came first, the chicken or the egg?

Slide 7

Slide 7 text

does the chicken of all chickens that don’t contain themselves contain itself?

Slide 8

Slide 8 text

Chicken Chicken Chicken: Chicken Chicken Doug Zongker University of Washington Chicken Chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken. Chicken chicken chicken chicken chicken chicken chicken chicken. Chicken, chicken chicken chicken, chicken chicken, chic- ken chicken chicken “chicken chicken” chicken “chicken chicken” chicken. Chicken, chicken chicken chicken chicken chicken chi- cken (chicken chicken) chicken chicken chicken chicken chicken, chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken. Chicken chicken chicken chicken chicken chicken chicken chicken chicken, chicken chicken chicken, chicken chicken chicken chicken chicken chicken chicken. CC Chickens: C.3.2 [Chickens]: Chicken Chickens—chicken/chicken chicken; C.3.4 [Chicken chicken]: Chicken chicken chicken—chickens; C.2.4 [Chicken-chicken chickens]: Chicken/Chicken, chicken chickens Chickens: chicken, chicken chicken, chicken, chicken 1 Chicken Chicken chicken, chicken, chicken chicken chicken chicken, chic- ken chicken chicken chicken chicken chicken [4]. Chicken chicken chicken chicken, chicken chicken chicken: chicken chicken chic- ken chicken chicken chicken chicken chicken chicken. (chicken chicken chicken chicken chicken chicken, chicken chicken chicken chicken chicken chicken chicken!) Chicken, chicken-chicken chicken chicken—chicken chicken, chi- cken chicken 95% chicken chicken-chicken chicken, chicken chic- ken chicken chicken—chicken chicken chicken chicken. Chicken, chicken chicken, chicken chicken chicken 1987. Chicken chicken chicken chicken chicken chicken-chicken-chicken chicken chicken chicken chicken chicken chicken, chicken chicken chicken chicken chicken chicken chicken. Chicken chicken, chicken chicken ch- icken chicken chicken chicken chicken (chicken chicken chicken chicken chicken, chicken chicken chicken chicken chicken chicken chicken chicken). Chicken chicken chicken chicken chicken chicken, chicken chicken (chicken chicken chicken chicken chicken chicken) chicken chic- ken chickens chicken. Chicken chickens chicken chicken chicken chicken chicken “chicken” chicken chickens chicken. Chicken ch- icken, chicken-chicken chicken chickens, chicken chicken chicken chicken chicken chicken chicken.1 Chicken chicken’s “chicken” chicken chicken chicken chicken—chicken chicken chicken chic- ken chicken chicken, chicken chicken chicken chicken chicken ch- icken. 1Chicken chicken chicken chicken chicken chicken chicken; chicken chickens. Chicken chicken Chicken [5]. + Chicken? Chicken Chicken Chicken Chicken Chicken, chicken, chicken Chicken Chicken Chicken Chicken/chicken chicken Chicken chicken chicken C C Chicken chicke n chicken chicken Chicken 1 Chicken chicken chicken. Chicken chicken, chicken chicken (chic- ken chicken chicken) chicken chicken-chicken. Chicken chicken chicken chicken chicken. Chicken-chicken chic- ken chicken chicken chicken chicken chicken, chicken chicken chi- cken chicken, chicken, chicken chicken chicken “chicken” chicken. Chicken chicken chicken chicken chicken chicken chicken, chic- ken, chicken chicken. Chicken chicken, chicken chicken chicken chicken chicken, chicken chicken chicken chicken chicken chicken (chicken, chicken-chicken chicken chicken chicken-chicken chic- ken chicken-chicken chicken). Chicken, chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken. Chicken chicken chicken chicken chicken chicken, chicken chic- ken chicken chicken chicken chicken chicken chicken chicken (ch- icken). Chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken, chicken chicken chicken, chicken, chicken chicken chicken chicken. Chicken chicken chicken, chicken chicken chicken, chicken chic- ken chickens chicken chicken chicken chicken. Chicken, chicken chicken chicken chicken chicken chicken chicken-chicken chicken, chicken chicken chickens Chicken 2. Chicken chicken chicken ch- icken chicken chicken chicken chicken chicken, chicken chicken chicken, chicken chickens chicken. Chicken chicken chicken chic- ken chicken chicken chicken chicken (chicken chicken Chicken 3), chicken chickens chicken chicken chicken (Chicken 4). Chicken chicken chicken chicken chicken, chicken chicken chickens chic- ken, chicken chicken chickens chickens chicken. Chicken chicken chicken chicken chicken chicken chicken. 2 Chicken chicken Chicken chicken chicken, C(n) chicken chicken chicken chicken chicken chicken chicken [4]. Chicken chicken chicken chicken ch- icken’s chickens Chicken [3] chicken chicken, chicken chicken ch-

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

chicken.js

Slide 11

Slide 11 text

JavaScript is the assembly of the web

Slide 12

Slide 12 text

function chicken(CHICKEN, Chicken) { Chicken &&( chicken. chicken =[, CHICKEN, CHICKEN = Chicken = chicken. $Chicken =-( CHICKEN ==( chicken. Chicken = Chicken ))], chicken. chicken [Chicken++] = chicken. chicken, chicken. CHICKEN = ++Chicken, chicken (--Chicken), chicken. $Chicken = ++Chicken, chicken. CHICKEN++ ); Chicken = chicken. Chicken [chicken. $Chicken++ ]; chicken. Chicken = CHICKEN? Chicken? '\012'== Chicken? chicken (++ CHICKEN, chicken. chicken [++ chicken. CHICKEN ]= CHICKEN - CHICKEN ): Chicken ==' '|'\015'== Chicken || (Chicken )== "c" & chicken. Chicken [chicken. $Chicken++ ]== "h" & chicken. Chicken [chicken. $Chicken++ ]== "i" & chicken. Chicken [chicken. $Chicken++ ]== "c" & chicken. Chicken [chicken. $Chicken++ ]== "k" & chicken. Chicken [chicken. $Chicken++ ]== "e" & chicken. Chicken [chicken. $Chicken++ ]== "n"&&++chicken. chicken [chicken. CHICKEN]? chicken (CHICKEN) :[ "Error on line "+CHICKEN+": expected 'chicken'", chicken. CHICKEN = CHICKEN ++- CHICKEN ]: chicken. chicken :( CHICKEN = chicken. Chicken[chicken.CHICKEN], Chicken? (Chicken = } --Chicken? --Chicken? --Chicken? --Chicken? --Chicken? --Chicken? --Chicken? --Chicken? --Chicken? chicken. CHICKEN++ && --Chicken :''+CHICKEN+';': chicken. Chicken [chicken. Chicken [-- chicken. CHICKEN ]&& (chicken. $Chicken += CHICKEN), --chicken. CHICKEN ]: chicken. Chicken [chicken. Chicken [CHICKEN] = chicken. Chicken [-- chicken. CHICKEN ],-- chicken. CHICKEN ]: chicken. Chicken [chicken. Chicken [chicken. $Chicken++ ]] [CHICKEN]: CHICKEN == chicken. Chicken [-- chicken. CHICKEN ]: CHICKEN*chicken. Chicken [-- chicken. CHICKEN ]: chicken. Chicken [-- chicken. CHICKEN ]- CHICKEN: chicken. Chicken [-- chicken. CHICKEN ]+ CHICKEN: chicken. CHICKEN ++ && "chicken", chicken. Chicken [chicken. CHICKEN ]= Chicken, chicken ()): CHICKEN ); return chicken. Chicken

Slide 13

Slide 13 text

50 LOC

Slide 14

Slide 14 text

cat chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊

Slide 15

Slide 15 text

quine chicken

Slide 16

Slide 16 text

Spec Every line in the program is inspected for chickens, and the corresponding number of chickens are pushed onto the stack. Execution is done directly on the stack, which may make the program susceptible to arbitrary chicken injection attacks.

Slide 17

Slide 17 text

0 axe Terminates all chickens. 1 chicken Pushes “chicken” onto the stack. 2 add Adds two topmost groups of chickens. 3 fox Topmost chickens become foxes. Subtract. 4 rooster Causes two topmost groups to multiply. 4.5 fence Divides chickens. Cannot be used. 5 compare Compares, pushes truthy or falsy chicken. 6 pick Pop address, pop source. 0 stack, 1 input. 7 peck Pop address, store value. 8 fr Pop offset, pop cond. If cond, fly to offset. 9 BBQ Chars the topmost group into ASCII. n Pushes n-10 chickens onto the stack.

Slide 18

Slide 18 text

disassembling the chicken

Slide 19

Slide 19 text

• Same variables with different case or prefix • Long chains of conditional evaluation • Increment, decrement, parentheses, commas, ternaries • Variable re-definition • Store values on the function object • Recursion

Slide 20

Slide 20 text

function chicken(CHICKEN, Chicken) { Chicken && (chicken.chicken = [, CHICKEN, CHICKEN = Chicken = chicken.$Chicken = -(CHICKEN == (chicken.Chicken = Chicken)) ], chicken.chicken[Chicken++] = chicken.chicken, chicken.CHICKEN = ++Chicken, chicken(--Chicken), chicken. $Chicken = ++Chicken, chicken.CHICKEN++); Chicken = chicken.Chicken[chicken.$Chicken++]; chicken.Chicken = CHICKEN ? Chicken ? '\012' == Chicken ? chicken(++CHICKEN, chicken.chicken[++chicken.CHICKEN] = CHICKEN - CHICKEN) : Chicken == ' ' | '\015' == Chicken || (Chicken) == "c" & chicken.Chicken[chicken.$Chicken++] == "h" & chicken.Chicken[chicken.$Chicken++] == "i" & chicken.Chicken[chicken.$Chicken++] == "c" & chicken.Chicken[chicken.$Chicken++] == "k" & chicken.Chicken[chicken.$Chicken++] == "e" & chicken.Chicken[chicken.$Chicken++] == "n" && + +chicken.chicken[chicken.CHICKEN] ? chicken(CHICKEN) : ["Error on line " + CHICKEN + ": expected 'chicken'", chicken.CHICKEN = CHICKEN++-CHICKEN ] : chicken.chicken : (CHICKEN = chicken.Chicken[chicken.CHICKEN], Chicken ? (Chicken = --Chicken ? --Chicken ? --Chicken ? --Chicken ? --Chicken ? --Chicken ? --Chicken ? --Chicken ? --Chicken ? chicken.CHICKEN++ && --Chicken : '' + CHICKEN + ';' : chicken.Chicken[chicken.Chicken[--chicken.CHICKEN] && (chicken.$Chicken += CHICKEN), --chicken.CHICKEN] : chicken.Chicken[chicken.Chicken[CHICKEN] = chicken.Chicken[--chicken.CHICKEN], --chicken.CHICKEN] : chicken.Chicken[chicken.Chicken[chicken.$Chicken++]][CHICKEN] : CHICKEN == chicken.Chicken[-- chicken.CHICKEN] : CHICKEN * chicken.Chicken[--chicken.CHICKEN] : chicken.Chicken[--chicken.CHICKEN] - CHICKEN : chicken.Chicken[--chicken.CHICKEN] + CHICKEN : chicken.CHICKEN++ && "chicken", chicken.Chicken[chicken.CHICKEN] = Chicken, chicken()) : CHICKEN); return chicken.Chicken }

Slide 21

Slide 21 text

function chicken(CHICKEN, Chicken)

Slide 22

Slide 22 text

function chicken(code, input)

Slide 23

Slide 23 text

function chicken(code, input) { if (input) { chicken.chicken = [ , code, code = input = chicken.$Chicken = -(code == (chicken.Chicken = input)) ]; chicken.chicken[input++] = chicken.chicken; chicken.CHICKEN = ++input; chicken(--input); chicken.$Chicken = ++input; chicken.CHICKEN++; }

Slide 24

Slide 24 text

• Restructure • Step through debugger • Stare until eyes fall out • Rename variable • Rinse, repeat... Strategy

Slide 25

Slide 25 text

readable version

Slide 26

Slide 26 text

var code = "", stack = [], $sp = -1, $ip = 0, $cp = 0; function inc() { stack[$sp]++; return true; } function push(value) { stack[++$sp] = value; } function pop() { return stack[$sp--]; } function peek() { return stack[$sp]; }

Slide 27

Slide 27 text

function chicken(input, le_code) { code = le_code; $cp = 0; $sp = -1; stack = []; push(stack); push(input); push(0); read_line(1); return run_loop(); }

Slide 28

Slide 28 text

function read_line(line) { var character = code[$cp++]; if (!character) { return; } if ('\012' == character) { // LF line++; push(0); return read_line(line); } if (character == ' ' || (character == "c" && code[$cp++] == "h" && code[$cp++] == "i" && code[$cp++] == "c" && code[$cp++] == "k" && code[$cp++] == "e" && code[$cp++] == "n") && inc()) { return read_line(line); } $sp = 0; stack = [ 0x0, "Error on line "+line+": expected 'chicken'" ]; }

Slide 29

Slide 29 text

function run_loop() { var instruction; $ip = 2; push(0); while (instruction = stack[$ip++]) { process_instruction(instruction); } return peek(); }

Slide 30

Slide 30 text

function process_instruction(instruction) { var head; switch (instruction) { case 1: push("chicken"); break; case 2: head = pop(); push(pop() + head); break; case 3: head = pop(); push(pop() - head); break; case 4: push(pop() * pop()); break; case 5: push(pop() == pop()); break; case 6: head = pop(); push(stack[stack[$ip++]][head]); break; case 7: head = pop(); stack[head] = pop(); break; case 8: head = pop(); if (pop()) { $ip += head; } break; case 9: push(''+pop()+';'); break; default: push(instruction - 10); break; } }

Slide 31

Slide 31 text

memory init

Slide 32

Slide 32 text

&stack &input 0 ip sp

Slide 33

Slide 33 text

parsing

Slide 34

Slide 34 text

&stack &input 0 ip sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊

Slide 35

Slide 35 text

&stack &input 0 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 36

Slide 36 text

&stack &input 1 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 37

Slide 37 text

&stack &input 2 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 38

Slide 38 text

&stack &input 3 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 39

Slide 39 text

&stack &input 4 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 40

Slide 40 text

&stack &input 5 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 41

Slide 41 text

&stack &input 6 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 42

Slide 42 text

&stack &input 7 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 43

Slide 43 text

&stack &input 8 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 44

Slide 44 text

&stack &input 9 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 45

Slide 45 text

&stack &input 10 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 46

Slide 46 text

&stack &input 11 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 47

Slide 47 text

&stack &input 11 0 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 48

Slide 48 text

&stack &input 11 1 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 49

Slide 49 text

&stack &input 11 2 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 50

Slide 50 text

&stack &input 11 3 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 51

Slide 51 text

&stack &input 11 4 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 52

Slide 52 text

&stack &input 11 5 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 53

Slide 53 text

&stack &input 11 6 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 54

Slide 54 text

&stack &input 11 6 0 sp chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken ␊ chicken chicken chicken chicken chicken chicken ␊ ip

Slide 55

Slide 55 text

execution

Slide 56

Slide 56 text

&stack &input 11 6 0 sp ip

Slide 57

Slide 57 text

&stack &input 11 6 0 sp set the code pointer to the beginning of the code segment ip

Slide 58

Slide 58 text

&stack &input 11 6 0 0 sp delimit code segment with an exit opcode ip

Slide 59

Slide 59 text

&stack &input 11 6 0 0 sp }addresses instructions stack } } ip

Slide 60

Slide 60 text

&stack &input 11 6 0 0 sp start executing opcodes ip

Slide 61

Slide 61 text

&stack &input 11 6 0 0 sp 11 = push 1 ip

Slide 62

Slide 62 text

&stack &input 11 6 0 0 1 sp push(1) ip

Slide 63

Slide 63 text

&stack &input 11 6 0 0 1 sp 6 = load ip

Slide 64

Slide 64 text

&stack &input 11 6 0 0 1 sp 6, 0 = load stack[0] ip source

Slide 65

Slide 65 text

&stack &input 11 6 0 0 1 sp push(&stack[pop()]) ip source

Slide 66

Slide 66 text

&stack &input 11 6 0 0 1 sp push(&stack[1]) ip

Slide 67

Slide 67 text

&stack &input 11 6 0 0 &input push(&input) ip sp

Slide 68

Slide 68 text

&stack &input 11 6 0 0 &input 0 = exit ip sp

Slide 69

Slide 69 text

&stack &input 11 6 0 0 &input return head of stack to caller which is: &input ip sp

Slide 70

Slide 70 text

&stack &input 1 0 sp what about the quine? ip

Slide 71

Slide 71 text

&stack &input 1 0 sp 1 = chicken ip

Slide 72

Slide 72 text

&stack &input 1 0 “chicken” sp push(“chicken”) ip

Slide 73

Slide 73 text

&stack &input 1 0 “chicken” sp 0 = exit ip

Slide 74

Slide 74 text

&stack &input 1 0 “chicken” sp ip return “chicken”

Slide 75

Slide 75 text

eggsembly

Slide 76

Slide 76 text

push 5 push 13 rooster bbq axe chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken␊ chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken␊ chicken chicken chicken chicken␊ chicken chicken chicken chicken chicken chicken chicken chicken chicken␊ eggsemble

Slide 77

Slide 77 text

push 5 push 13 rooster bbq axe push 5 push 13 multiply char exit chicken asm

Slide 78

Slide 78 text

$ cat 99chickens.cha | chickenasm | eggsemble | chicken

Slide 79

Slide 79 text

written in

Slide 80

Slide 80 text

count

Slide 81

Slide 81 text

&stack &input ... ... ... sp 3

Slide 82

Slide 82 text

&stack &input ... ... ... ip push 0 push 2 store push 0 push 32 char add push 3 store 3 sp

Slide 83

Slide 83 text

&stack &input ... ... ... ip push 0 push 2 store push 0 push 32 char add push 3 store write 0 into register 2 } 3 sp

Slide 84

Slide 84 text

&stack &input 0 ... ... ip push 0 push 2 store push 0 push 32 char add push 3 store i 3 write 0 into register 2 } sp

Slide 85

Slide 85 text

&stack &input 0 ... ... ip push 0 push 2 store push 0 push 32 char add push 3 store write “0” into register 3 } i 3 write 0 into register 2 } sp

Slide 86

Slide 86 text

&stack &input 0 “0 “ ... ip push 0 push 2 store push 0 push 32 char add push 3 store i out 3 write 0 into register 2 } write “0” into register 3 } sp

Slide 87

Slide 87 text

&stack &input 0 “0 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 3 sp

Slide 88

Slide 88 text

&stack &input 0 “0 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } 3 sp

Slide 89

Slide 89 text

&stack &input 0 “0 “ ... 0 sp ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } 3

Slide 90

Slide 90 text

&stack &input 0 “0 “ ... 0 ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } load register 1 input } 3 sp

Slide 91

Slide 91 text

&stack &input 0 “0 “ ... 0 3 sp ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } load register 1 input } 3

Slide 92

Slide 92 text

&stack &input 0 “0 “ ... 0 3 ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } load register 1 input } 3 compare } sp

Slide 93

Slide 93 text

&stack &input 0 “0 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } load register 1 input } 3 compare } false sp

Slide 94

Slide 94 text

&stack &input 0 “0 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } load register 1 input } 3 compare } false if true, jump to end } sp

Slide 95

Slide 95 text

&stack &input 0 “0 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } load register 1 input } 3 compare } false if true, jump to end } sp

Slide 96

Slide 96 text

&stack &input 0 “0 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } load register 1 input } 3 compare } if true, jump to end } sp

Slide 97

Slide 97 text

&stack &input 0 “0 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } load register 1 input } 3 compare } if true, jump to end } load register 2 i } sp

Slide 98

Slide 98 text

&stack &input 0 “0 “ ... 0 ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } load register 1 input } 3 compare } if true, jump to end } load register 2 i } sp

Slide 99

Slide 99 text

&stack &input 0 “0 “ ... 0 ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } load register 1 input } 3 compare } if true, jump to end } load register 2 i } increment } sp

Slide 100

Slide 100 text

&stack &input 0 “0 “ ... 1 ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } load register 1 input } 3 compare } if true, jump to end } load register 2 i } increment } sp

Slide 101

Slide 101 text

&stack &input 0 “0 “ ... 1 ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } load register 1 input } 3 compare } if true, jump to end } load register 2 i } increment } store register 2 i } sp

Slide 102

Slide 102 text

&stack &input 1 “0 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 load register 2 i } load register 1 input } 3 compare } if true, jump to end } load register 2 i } increment } store register 2 i } sp

Slide 103

Slide 103 text

&stack &input 1 “0 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } sp

Slide 104

Slide 104 text

&stack &input 1 “0 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } append “i” to out } sp

Slide 105

Slide 105 text

&stack &input 1 “0 1 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out sp

Slide 106

Slide 106 text

&stack &input 1 “0 1 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } sp

Slide 107

Slide 107 text

&stack &input 1 “0 1 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } sp

Slide 108

Slide 108 text

&stack &input 1 “0 1 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } sp

Slide 109

Slide 109 text

&stack &input 1 “0 1 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } sp

Slide 110

Slide 110 text

&stack &input 1 “0 1 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } false sp

Slide 111

Slide 111 text

&stack &input 1 “0 1 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } sp

Slide 112

Slide 112 text

&stack &input 2 “0 1 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } sp

Slide 113

Slide 113 text

&stack &input 2 “0 1 2 “ ... ip i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } sp

Slide 114

Slide 114 text

&stack &input 2 “0 1 2 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip sp

Slide 115

Slide 115 text

&stack &input 2 “0 1 2 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip sp

Slide 116

Slide 116 text

&stack &input 2 “0 1 2 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip sp

Slide 117

Slide 117 text

&stack &input 2 “0 1 2 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip false sp

Slide 118

Slide 118 text

&stack &input 2 “0 1 2 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip sp

Slide 119

Slide 119 text

&stack &input 3 “0 1 2 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip sp

Slide 120

Slide 120 text

&stack &input 3 “0 1 2 3 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip sp

Slide 121

Slide 121 text

&stack &input 3 “0 1 2 3 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip sp

Slide 122

Slide 122 text

&stack &input 3 “0 1 2 3 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip sp

Slide 123

Slide 123 text

&stack &input 3 “0 1 2 3 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip sp

Slide 124

Slide 124 text

&stack &input 3 “0 1 2 3 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip true sp

Slide 125

Slide 125 text

&stack &input 3 “0 1 2 3 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip sp

Slide 126

Slide 126 text

&stack &input 3 “0 1 2 3 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip sp

Slide 127

Slide 127 text

&stack &input 3 “0 1 2 3 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip sp

Slide 128

Slide 128 text

&stack &input 3 “0 1 2 3 “ ... i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip load out } sp

Slide 129

Slide 129 text

&stack &input 3 “0 1 2 3 “ ... “0 1 2 3 “ i out push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 } 3 compare i to input if true, jump to end } increment i } }append “i” to out jump to start } ip load out } sp

Slide 130

Slide 130 text

&stack &input 3 “0 1 2 3 “ ... “0 1 2 3 “ i out 3 “0 1 2 3 “ is returned to caller sp

Slide 131

Slide 131 text

push 2 load 0 push 1 load 0 compare push 24 jump push 2 load 0 push 1 add push 2 store push 3 load 0 push 2 load 0 add push 32 char add push 3 store push 1 push 0 push 33 subtract jump push 3 load 0 loop break

Slide 132

Slide 132 text

arbitrary chicken injection

Slide 133

Slide 133 text

&stack &input ... ... ip push 11 push 12 push 2 push 0 push 1 push 1 jump sp

Slide 134

Slide 134 text

&stack &input ... ... 11 ip push 11 push 12 push 2 push 0 push 1 push 1 jump sp

Slide 135

Slide 135 text

&stack &input ... ... 11 12 ip push 11 push 12 push 2 push 0 push 1 push 1 jump sp

Slide 136

Slide 136 text

&stack &input ... ... 11 12 2 ip push 11 push 12 push 2 push 0 push 1 push 1 jump sp

Slide 137

Slide 137 text

&stack &input ... ... 11 12 2 0 ip push 11 push 12 push 2 push 0 push 1 push 1 jump sp

Slide 138

Slide 138 text

&stack &input ... ... 11 12 2 0 ip push 11 push 12 push 2 push 0 push 1 push 1 jump sp ip

Slide 139

Slide 139 text

&stack &input ... ... 11 12 2 0 ip push 11 push 12 push 2 push 0 push 1 push 1 jump sp ip

Slide 140

Slide 140 text

&stack &input ... ... 11 12 2 0 ip push(1) sp

Slide 141

Slide 141 text

&stack &input ... ... 11 12 2 0 ip push(1) 1 sp

Slide 142

Slide 142 text

&stack &input ... ... 11 12 2 0 ip push(2) 1 sp

Slide 143

Slide 143 text

&stack &input ... ... 11 12 2 0 ip push(2) 1 2 sp

Slide 144

Slide 144 text

&stack &input ... ... 11 12 2 0 ip add 1 2 sp

Slide 145

Slide 145 text

&stack &input ... ... 11 12 2 0 ip add 3 sp

Slide 146

Slide 146 text

&stack &input ... ... 11 12 2 0 ip exit 3 sp

Slide 147

Slide 147 text

&stack &input ... ... 11 12 2 0 ip return 3 to caller 3 sp

Slide 148

Slide 148 text

No content

Slide 149

Slide 149 text

v @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^

Slide 150

Slide 150 text

v @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ ip

Slide 151

Slide 151 text

v @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ ip

Slide 152

Slide 152 text

v @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 ip

Slide 153

Slide 153 text

v @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 0 ip

Slide 154

Slide 154 text

v @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 0 0 ip

Slide 155

Slide 155 text

v @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 0 0 ip

Slide 156

Slide 156 text

3 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ ip [n]

Slide 157

Slide 157 text

3 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 0 ip [n]

Slide 158

Slide 158 text

3 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 0 1 ip [n]

Slide 159

Slide 159 text

3 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 0 1 0 ip [n]

Slide 160

Slide 160 text

3 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 0 1 0 ip [n]

Slide 161

Slide 161 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ ip [n,i]

Slide 162

Slide 162 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 0 ip [n,i]

Slide 163

Slide 163 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ ip [n,i] Output: 0

Slide 164

Slide 164 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ ip [n,i] Output: 0

Slide 165

Slide 165 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 32 ip [n,i] Output: 0

Slide 166

Slide 166 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 32 ip [n,i] Output: 0

Slide 167

Slide 167 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ ip [n,i] Output: 0

Slide 168

Slide 168 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ ip [n,i] Output: 0

Slide 169

Slide 169 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 0 ip [n,i] Output: 0

Slide 170

Slide 170 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 0 0 ip [n,i] Output: 0

Slide 171

Slide 171 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 ip [n,i] Output: 0

Slide 172

Slide 172 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 1 ip [n,i] Output: 0

Slide 173

Slide 173 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 1 0 ip [n,i] Output: 0

Slide 174

Slide 174 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 0 ip [n,i] Output: 0

Slide 175

Slide 175 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 0 ip [n,i] Output: 0

Slide 176

Slide 176 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 ip

Slide 177

Slide 177 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 ip

Slide 178

Slide 178 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 ip

Slide 179

Slide 179 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 ip

Slide 180

Slide 180 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 1 [n,i] Output: 0 ip

Slide 181

Slide 181 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 1 0 [n,i] Output: 0 ip

Slide 182

Slide 182 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 0 [n,i] Output: 0 ip

Slide 183

Slide 183 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 0 1 [n,i] Output: 0 ip

Slide 184

Slide 184 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 1 [n,i] Output: 0 ip

Slide 185

Slide 185 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 1 1 [n,i] Output: 0 ip

Slide 186

Slide 186 text

30 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 1 1 0 [n,i] Output: 0 ip

Slide 187

Slide 187 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 ip

Slide 188

Slide 188 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 1 [n,i] Output: 0 ip

Slide 189

Slide 189 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 1 0 [n,i] Output: 0 ip

Slide 190

Slide 190 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 1 [n,i] Output: 0 ip

Slide 191

Slide 191 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 ip

Slide 192

Slide 192 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 ip

Slide 193

Slide 193 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 32 [n,i] Output: 0 1 ip

Slide 194

Slide 194 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 ip

Slide 195

Slide 195 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 ip

Slide 196

Slide 196 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 ip

Slide 197

Slide 197 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 0 ip [n,i] Output: 0 1

Slide 198

Slide 198 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 0 0 ip [n,i] Output: 0 1

Slide 199

Slide 199 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 ip [n,i] Output: 0 1

Slide 200

Slide 200 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 1 ip [n,i] Output: 0

Slide 201

Slide 201 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 1 0 ip [n,i] Output: 0 1

Slide 202

Slide 202 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 1 ip [n,i] Output: 0 1

Slide 203

Slide 203 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 1 [n,i] Output: 0 1 ip

Slide 204

Slide 204 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 ip

Slide 205

Slide 205 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 ip

Slide 206

Slide 206 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 ip

Slide 207

Slide 207 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 ip

Slide 208

Slide 208 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 1 [n,i] Output: 0 1 ip

Slide 209

Slide 209 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 1 0 [n,i] Output: 0 1 ip

Slide 210

Slide 210 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 1 [n,i] Output: 0 1 ip

Slide 211

Slide 211 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 1 1 [n,i] Output: 0 1 ip

Slide 212

Slide 212 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 2 [n,i] Output: 0 1 ip

Slide 213

Slide 213 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 2 1 [n,i] Output: 0 1 ip

Slide 214

Slide 214 text

31 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 2 1 0 [n,i] Output: 0 1 ip

Slide 215

Slide 215 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 ip

Slide 216

Slide 216 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 1 [n,i] Output: 0 1 ip

Slide 217

Slide 217 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 1 0 [n,i] Output: 0 1 ip

Slide 218

Slide 218 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 2 [n,i] Output: 0 1 ip

Slide 219

Slide 219 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 2 ip

Slide 220

Slide 220 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 2 ip

Slide 221

Slide 221 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 32 [n,i] Output: 0 1 2 ip

Slide 222

Slide 222 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 2 ip

Slide 223

Slide 223 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 2 ip

Slide 224

Slide 224 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 2 ip

Slide 225

Slide 225 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 2 [n,i] Output: 0 1 2 ip

Slide 226

Slide 226 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 2 ip

Slide 227

Slide 227 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 2 ip

Slide 228

Slide 228 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 2 ip

Slide 229

Slide 229 text

32 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 [n,i] Output: 0 1 2 ip

Slide 230

Slide 230 text

33 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 2 3 ip

Slide 231

Slide 231 text

33 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 2 3 ip

Slide 232

Slide 232 text

33 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 2 3 ip

Slide 233

Slide 233 text

33 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ 3 3 [n,i] Output: 0 1 2 3 ip

Slide 234

Slide 234 text

33 @ > & 00p 0 10p ;; 0. ;; " ", ;; > 00g 10g w @ v < > 10g 1+ 10p ;; 10g. ;; " ", ^ [n,i] Output: 0 1 2 3 ip

Slide 235

Slide 235 text

No content

Slide 236

Slide 236 text

int sp = 0; double val[MAXVAL]; void push(double f) { val[sp++] = f; } double pop(void) { return val[--sp]; }

Slide 237

Slide 237 text

/* reverse Polish calculator */ int main(int argc, char **argv) { int type; double op2; char s[MAXOP]; while ((type = getop(s)) != EOF) { switch (type) { case NUMBER: push(atof(s)); break; case '+': push (pop() + pop()) ; break; case '*': push(pop() * pop()); break; case '-': op2 = pop(); push(pop() - op2); break; case '/': op2 = pop(); if (op2 != 0.0) push(pop() / op2); else printf("error: zero divisor\n"); break; case '\n': printf("\t%.8g\n", pop()); break; default: printf("error: unknown command %s\n", s); break; } } return 0; }

Slide 238

Slide 238 text

RPN calculator 3 4 + 7 5 5 * 25 2 3 + 2 * 10

Slide 239

Slide 239 text

mandatory XKCD

Slide 240

Slide 240 text

brainfuck

Slide 241

Slide 241 text

>+++++++++[<+++++++ +>-]<.>+++++++[<+++ +>-]<+.+++++++..++ +.>>>++++++++[<+++ +>-]<.>>>++++++++++[< +++++++++>-]<---.<<<<. +++.------.--------.>>+.

Slide 242

Slide 242 text

0 0 0 0 0 0 0 0 0 p

Slide 243

Slide 243 text

on turing completeness

Slide 244

Slide 244 text

chicken in chicken?

Slide 245

Slide 245 text

No content

Slide 246

Slide 246 text

References • Paper by Doug Zongker isotropic.org/papers/chicken.pdf youtube.com/watch?v=yL_-1d9OSdk • Chicken.js by Torbjörn Söderstedt torso.me/chicken

Slide 247

Slide 247 text

Chicken • Chicken • Chicken • Chicken

Slide 248

Slide 248 text

Questions? • Chicken Chicken Chicken • github.com/igorw/chicken-php • github.com/igorw/befunge-php • github.com/igorw/brainfuck-php • @igorwesome