f } g e t int main() s { char login[512]; fgets(login, 512, - - PowerPoint PPT Presentation

f
SMART_READER_LITE
LIVE PREVIEW

f } g e t int main() s { char login[512]; fgets(login, 512, - - PowerPoint PPT Presentation

#include <ctype.h> // tolower #include <string.h> // strcmp sfp main() #include <stdio.h> // fgets, fputs void reveal_secret() login { fputs("SUPER SECRET = 42\n", stdout); } stdin int verify(const char*


slide-1
SLIDE 1

stdin 512 login rip sfp sfp

main()

login

fgets()

%esp %ebp %eip

f g e t s

#include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; }

slide-2
SLIDE 2

stdin 512 login rip sfp sfp

main() fgets()

%esp %ebp %eip #include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } login

500/512 bytes 512 bytes

slide-3
SLIDE 3

stdin 512 login rip sfp sfp

main() fgets()

%esp %ebp %eip #include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; }

512 bytes

login

slide-4
SLIDE 4

stdin 512 login rip sfp sfp

main()

%esp %ebp %eip #include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; }

512 bytes

login

slide-5
SLIDE 5

login 512 login rip sfp sfp

main()

%esp %ebp %eip #include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; }

512 bytes

login

slide-6
SLIDE 6

login rip login rip sfp sfp

main()

%esp %ebp %eip #include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; }

512 bytes

login

slide-7
SLIDE 7

login rip sfp rip sfp sfp

main()

%esp %ebp %eip

verify()

#include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; }

512 bytes

login

slide-8
SLIDE 8

login rip sfp name[i] rip sfp sfp

main()

%esp %ebp %eip

verify() tolower()

t

  • l
  • w

e r

#include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i user

256 bytes 512 bytes

login

slide-9
SLIDE 9

login rip sfp name[i] rip sfp sfp

main()

%esp %ebp %eip

verify() tolower()

#include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i user

256 bytes 512 bytes

login

slide-10
SLIDE 10

login rip sfp name[i] rip sfp sfp

main()

%esp %ebp %eip

verify() tolower()

#include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i user

256 bytes 512 bytes

login

slide-11
SLIDE 11

login rip sfp name[i] rip sfp sfp

main()

%esp %ebp %eip

verify()

#include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i user

256 bytes 512 bytes

login

slide-12
SLIDE 12

login rip sfp name[i] rip sfp sfp

main()

%esp %ebp %eip

verify()

#include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i = 0 user

256 bytes

  • 512 bytes

login

slide-13
SLIDE 13

login rip sfp name[i] rip sfp sfp

main()

%esp %ebp %eip

verify()

#include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i = 1 user

256 bytes

  • 512 bytes

login

slide-14
SLIDE 14

login rip sfp name[i] rip sfp sfp

main()

%esp %ebp %eip

verify()

#include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i = 2 user

256 bytes

  • 512 bytes

login

slide-15
SLIDE 15

login rip sfp name[i] rip sfp sfp

main()

%esp %ebp %eip

verify()

#include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i = 3 user

256 bytes

  • 512 bytes

login

slide-16
SLIDE 16

login

  • name[i]

rip sfp sfp

main()

%esp %ebp %eip

verify()

#include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i = 500 user

256 bytes

  • 512 bytes
slide-17
SLIDE 17

login name[i] rip sfp %esp %ebp %eip #include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i

  • sfp

main() verify()

user

256 bytes

  • 512 bytes
slide-18
SLIDE 18

login &"xyzzy" rip sfp %esp %ebp %eip #include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i

  • sfp

main() verify()

user

256 bytes

  • 512 bytes
slide-19
SLIDE 19

login &"xyzzy" user sfp %esp %ebp %eip #include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i

  • sfp

main() verify()

user

256 bytes

  • 512 bytes
slide-20
SLIDE 20

login &"xyzzy" user rip %esp %ebp %eip #include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i

  • sfp

main() verify()

user

256 bytes

  • 512 bytes
slide-21
SLIDE 21

login &"xyzzy" user rip %esp %ebp %eip sfp

strcmp()

#include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i

  • sfp

main() verify()

user

256 bytes

  • 512 bytes
slide-22
SLIDE 22

login &"xyzzy" user rip %esp %ebp %eip sfp

strcmp()

#include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i

  • sfp

main() verify()

user

256 bytes

  • 512 bytes
slide-23
SLIDE 23

login &"xyzzy" user rip %esp %ebp %eip sfp

strcmp()

s t r c m p

#include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i

  • sfp

main() verify()

user

256 bytes

  • 512 bytes
slide-24
SLIDE 24

login &"xyzzy" user rip %esp %ebp %eip sfp #include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i

  • sfp

main() verify()

user

256 bytes

  • 512 bytes
slide-25
SLIDE 25

login &"xyzzy" user rip %esp %ebp %eip sfp #include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i user

256 bytes

  • sfp

main() verify()

  • 512 bytes
slide-26
SLIDE 26

login &"xyzzy" user rip %esp %ebp %eip sfp #include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i user

256 bytes

  • sfp

main() verify()

  • 512 bytes
slide-27
SLIDE 27

login &"xyzzy" user rip %esp %ebp %eip sfp #include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i user

256 bytes

  • sfp

main() verify()

  • 512 bytes
slide-28
SLIDE 28

login

512 bytes

  • sfp

main() verify()

  • main()

verify()

&"xyzzy" user rip %esp %ebp %eip sfp #include <ctype.h> // tolower #include <string.h> // strcmp #include <stdio.h> // fgets, fputs void reveal_secret() { fputs("SUPER SECRET = 42\n", stdout); } int verify(const char* name) { char user[256]; int i; for (i = 0; name[i] != '\0'; ++i) user[i] = tolower(name[i]); user[i] = '\0'; return strcmp(user, "xyzzy") == 0; } int main() { char login[512]; fgets(login, 512, stdin); if (! verify(login)) return 1; reveal_secret(); return 0; } i

Crash!