La fonction main appel directement la fonction login. Celle ci commence par afficher des informations, demande le mot de passe, puis appel test_password_valid. Pour débloquer la porte, elle vérifie si ce qui se trouve à l'adresse 0x2410 est égal à 0xF6.
4520 <login> 4520: c243 1024 mov.b #0x0, &0x2410 4524: 3f40 7e44 mov #0x447e "Enter the password to continue.", r15 4528: b012 de45 call #0x45de <puts> 452c: 3f40 9e44 mov #0x449e "Remember: passwords are between 8 and 16 characters.", r15 4530: b012 de45 call #0x45de <puts> 4534: 3e40 1c00 mov #0x1c, r14 4538: 3f40 0024 mov #0x2400, r15 453c: b012 ce45 call #0x45ce <getsn> 4540: 3f40 0024 mov #0x2400, r15 4544: b012 5444 call #0x4454 <test_password_valid> 4548: 0f93 tst r15 454a: 0324 jz $+0x8 454c: f240 ba00 1024 mov.b #0xba, &0x2410 4552: 3f40 d344 mov #0x44d3 "Testing if password is valid.", r15 4556: b012 de45 call #0x45de <puts> 455a: f290 f600 1024 cmp.b #0xf6, &0x2410 4560: 0720 jne #0x4570 <login+0x50> 4562: 3f40 f144 mov #0x44f1 "Access granted.", r15 4566: b012 de45 call #0x45de <puts> 456a: b012 4844 call #0x4448 <unlock_door> 456e: 3041 ret 4570: 3f40 0145 mov #0x4501 "That password is not correct.", r15 4574: b012 de45 call #0x45de <puts> 4578: 3041 ret
On remarque aussi que la taille de ce qu'on rentre n'est pas vérifié et que notre entrée est stockée en 0x2400. Il suffit donc de spécifier comme input 41414141414141414141414141414141f6f6 afin d'écrire la valeur 0xF6 à l'adresse 0x2410 afin d'ouvrir la porte.
Note : dans ce niveau, la fonction test_password_valid déclenche l'interruption 0x7D pour appeler un périphérique qui lui connais et vérifie le mot de passe. (cf https://microcorruption.com/manual.pdf
)