smok1360
Messages postés4Date d'inscriptionmercredi 31 octobre 2007StatutMembreDernière intervention10 mars 2008
-
21 févr. 2008 à 18:53
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
23 févr. 2008 à 20:05
Bonjour à tous,
Pour commencer, j'espère de ne pas avoir choisis le mauvais lieu pour poster, j'ai un petit peu hésité
Donc, j'ai décidé d'apprendre l'assembleur et j'ai fait un petit "vérificateur de mot de passe" trés basique et le problème est que mon code me renvoie toujours NO, je pense que cela se joue sur une mauvaise utilisation de cmp :
SECTION .data
mdp db '123'
bon db 'OK', 10
bad db 'NO', 10
wel db 'Entrez votre mdp : '
welen equ $-wel
buflen db 1024
SECTION .bss
buf resb 1024
SECTION .text
GLOBAL _start
_start:
mov edx, welen
mov ecx, wel
mov ebx, 1
mov eax, 4
int 80h
EDIT : Je suis sous Linux et CPU : i686 mais bon je pense que c'est surtout une erreur d'écriture et je tiens à préciser que je n'ai aucune erreur avec nasm et ld...
_dune2_
Messages postés141Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention20 avril 2011 22 févr. 2008 à 14:02
Salut,
commenter son code peut aider à diagnostiquer ;)
ex :
; écriture de 'Entrez votre mdp : ' sur la console (eax:4 -> sys_write , ebx:1 -> stdout)
mov edx, welen
mov ecx, wel
mov ebx, 1
mov eax, 4
int 80h
; lecture du mot de passe (eax:3 -> sys_read, ebx:0 -> stdin)
mov edx, buflen
mov ecx, buf
mov ebx, 0
mov eax, 3
int 80h
; on recopie les 4 1ers octets de la chaine buf en LSB (ordre des octets inversés) dans eax
mov eax, [buf]
; on compare ce mot de 32bits avec l'adresse du texte '123'
cmp eax, mdp
; si ils sont identiques (ce que je doute fort en comparant 4octets
; d'un texte et une adresse), alors on va l'affichage de "OK"
je cest_bon
; on affiche 'NO'
mov edx, 3
mov ecx, bad
mov ebx, 1
mov eax, 4
int 80h
; on quitte le prog
exit:
mov ebx, 0
mov eax, 1
int 80h
Bon ben après une simple analyse, je pense que ça a l'air évident :)
Il n'y a aucune chance pour que tes 4 octets de "buf" soient identique à une adresse.
Première correction : changer "cmp eax, mdp" par "cmp eax, [mdp]" (pour comparer les 4 1ers octets de 'buf' aux 4 1ers octets de 'mdp').
Ensuite, le problème c'est que de cette manière tu compares 4 octets (pas un de plus, pas un de moins !)... Donc si tu veux garder cette simplicité, il te faut restreindre la saisie à 4 caractères, et utiliser un mot de passe
de 4 caractères (exemple : "mdp db '1234'").
cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 20083 22 févr. 2008 à 15:52
Bonjour,
Comme te le fait remarquer _dune2_ ton problème réside dans le fait que tu compare ton mot de passe à une adresse. Tu peux également effectuer la comparaison de tes caractères avec l'instruction cmpsb (comparaison octet par octet) ou cmpsd (dword par dword) - mais il faudra avoir un nombre de caractères multiple de 4.
Pour les appels système Linux, je ne sais pas car je débute sur cet OS.
PS: Je suis à la recherche d'infos pour les "api" Linux du style MessageBox de Windows.
_dune2_
Messages postés141Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention20 avril 2011 22 févr. 2008 à 16:25
Salut Nasman,
pour les "api" du style MessageBox sous linux, il faut bien assimiler que sous unix, l'interface graphique est une surcouche à l'OS. Il ne fait donc pas parti des appels systèmes standards.
Pour pouvoir créer et gérer une application graphique, il te faudra utiliser un "toolkit" graphique. Sous linux 2 toolkits sont plutôt bien intégré : gnome et kde.
_dune2_
Messages postés141Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention20 avril 2011 22 févr. 2008 à 17:42
Ensuite, en ce qui concerne l'asm intel à proprement parler, il faut se diriger vers les datasheets intel. Ces documents de références sont gros et sembles confus, mais ce sont des documents de références sur lesquels on se refère pour une instruction en particulier par exemple.
C'est notre sacro-sainte bible du programmeur asm ;)
cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 20083 22 févr. 2008 à 21:56
>_dune2_
Merci pour ces infos, j'ai la distribution ubuntu (donc gnome) et malgré mes recherches sur le net, je n'ai pas trouvé grand chose sur l'interface graphique. Je comprend mieux maintenant et je vais regarder la doc sur gnome.
>smok1360
Personnellement j'utilise la documentation fournie avec Nasm et pour la programmation sous windows j'utilisais un fichier win32.hlp (plus trop à jour mais plus commode que msdn).