.data #declaration du segment des variables statiques initialisées bonjour: .string "Hello, World !\n" non_affiche: .string "Ce message ne peut pas être affiché\n" tentative_crack: .string "Tentative de crack !\nAbandon...\n" .text #déclaration du segment code .global _start _start: jmp checksum #On commence par effectuer Checksum suite: #on revient ici après le checksum s'il est positif xorl %eax,%eax movb $4, %al xorl %ebx,%ebx inc %ebx movl $bonjour,%ecx xorl %edx,%edx mov $15,%edx int $0x80 xorl %eax,%eax cmp $1,%al jne exit naffiche: xorl %eax,%eax movb $4, %al xorl %ebx,%ebx inc %ebx movl $non_affiche,%ecx xorl %edx,%edx mov $36,%edx int $0x80 exit: xorl %eax,%eax xorl %ebx,%ebx inc %eax int $0x80 checksum: #fonction checksum xorl %ebx,%ebx mov $checksum,%ecx sub $_start,%ecx mov $_start,%esi boucle: #boucle d'addition des opcodes lodsb add %eax,%ebx loop boucle cmpl $5917,%ebx #on a au préalable compté les opcodes et trouvé 5917 jne crack #Si le résultat de la boucle n'est pas 5917, on passe à jmp suite #sinon on revient au début du programme crack: #On avertit de la tentative de crack et on quitte xorl %eax,%eax movb $4, %al xorl %ebx,%ebx inc %ebx movl $tentative_crack,%ecx xorl %edx,%edx mov $32,%edx int $0x80 jmp exit