5 Erreurs à trouver

Signaler
Messages postés
155
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
15 février 2009
-
Messages postés
30
Date d'inscription
lundi 23 juin 2003
Statut
Membre
Dernière intervention
29 août 2007
-
Bonjour !

J'explique le contexte. Un de mes professeurs ma donné comme défi de trouver les 5 erreurs dans le code ASM suivant. Je sais qu'il l'a trouvé sur internet (un site de défi je crois). J'ai essayé d'apprendre le ASM sur le tât comme on dit mais sans résultat. Alors, pour vu que mon prof ma dit d'utiliser tout les moyens :P Je me vire vers la fabuleuse communauté ASM de Code-Source pour m'aider. Vous n'etes pas oubliger de me donner les 5 erreurs toutes cuit dans le bec mais des indices. J'ai découvert 2 anomalies dans le code que j'ai précisé plus bas.

Voici l'énoncé du email (ou du site web) :

Jean-Claude, expert en programmation rentre un peu beurré d'une soirée.
Devant se lever tôt le matin, et n'ayant aucun réveil il décide de
faire un réveil en ASSEMBLEUR.

Il ouvre MASM32 v8.2, et commence à taper. Seulement, toujours éméché, il oublie certaines variables et instructions.

Il va donc sur IRC et demande à un copain de l'aider à trouver les erreurs dans son code, ne se sentant pas apte à debogger.

Il précise à son ami, que le réveil possède un champ (IDC_TIME) et un bouton (BTN_TIME).

Vous êtes l'ami et Jean-Claude vous a donné une partie (et donc pas l'entieretée du programme) du programme boggé.

>Votre but, trouver au maximum 5 erreurs. (aucune suppression, seulement des modifications et des ajouts)

>TOUT et je répète TOUT doit être utilisé.

Et finalement le code :


.586p

.mmx

.model flat, stdcall

option casemap :none


Include \masm32\include\windows.inc

Include \masm32\include\user32.inc

Include \masm32\include\kernel32.inc


Includelib \masm32\lib\user32.lib

Includelib \masm32\lib\kernel32.lib


.const

BTN_TIME equ 1001

IDC_TIME equ 1002


.data

format db "%x" ,0

time byte 20 dup (0)

buffertimeconv byte 20 dup (0)


.code


DialogProc Proc hwnd:dword,message:dword,wParam:dword,lParam:dword


debut:


pushad

mov eax,hwnd

.IF message==WM_COMMAND

mov eax,wParam

.IF ax==BTN_TIME

call deb

INVOKE SetDlgItemTextA,hwnd,IDC_TIME, addr time

.ENDIF

.ELSE

popad

xor eax,eax

ret

.ENDIF

popad

xor eax,eax

ret


DialogProc endp


deb:

pushad


invoke GetSystemTime, addr time

jmp first


conv:

pushad

INVOKE wsprintf, addr buffertimeconv, addr format, buffertimeconv

popad


second:

mov byte ptr ds:[ecx], al

call qqch   <-- Appel d'une fonction (mais laquel ?)

mov ax, word ptr ds:[buffertimeconv]

.IF ah==0

mov al, 30h

.ENDIF

mov word ptr ds:[buffertimeconv], 0

mov word ptr ds:[edx], ax

.IF ebx==6

mov byte ptr ds:[edx+ebx+2], 0

.ELSE

mov byte ptr ds:[edx+ebx+2], 58

.ENDIF

ret


first:

xor eax,eax

sub esi, esi

mov ebx, esi

mov ecx, offset buffertimeconv

mov edx, offset time

mov al, byte ptr ds:[edx+8]

call second

add ebx, 3

mov al, byte ptr ds:[edx+10]

call second

add ebx, 3

mov al, byte ptr ds:[edx+12]

call second

popad

ret
<-- Manque l'instruction de fin de fichier !

~~ Cor
dialement Francois Gingras

5 réponses

Messages postés
589
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
17 septembre 2021
3
vite fait comme ça
time SYSTEMTIME <> ;byte 20 dup (0)
debut: mal placé doit servir a la fin  "end debut" placer après dialog
manque la ressource , ce qui rend l'exercice pas du tout amusant

prendre des bytes dans la structure time parait des plus suspect

mov al, byte ptr time.wHour

;[edx+8] word
 
Messages postés
141
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
20 avril 2011

Salut !

j'ai trouvé les 5 erreurs !!

->



Include \masm32\include\windows.inc
Include \masm32\include\user32.inc
Include \masm32\include\kernel32.inc
Includelib \masm32\lib\user32.lib
Includelib \masm32\lib\kernel32.lib



.. bon ... ok ... je -->[]

Gentoo... que du bonheur ...
Messages postés
155
Date d'inscription
vendredi 12 décembre 2003
Statut
Membre
Dernière intervention
15 février 2009

?????????? explique un peu plus si cé vraiment la -_-

~~ Cordialement Francois Gingras
Messages postés
141
Date d'inscription
mercredi 19 juillet 2006
Statut
Membre
Dernière intervention
20 avril 2011

Ben quand je compile avec nasm ou avec as sous linux, j'ai tout de suite ces 5 lignes en erreur ! ;)
Sans rancune ;)

Gentoo... que du bonheur ...
Messages postés
30
Date d'inscription
lundi 23 juin 2003
Statut
Membre
Dernière intervention
29 août 2007

Salut à toi bizzard4

Premièrement, je ne te répondrai pas.
Deuxièmement, l'équipe d'administration de Newbie Contest te remercie pour la publicité que tu fais de leurs épreuves. Le code ci-dessus fait parti d'une épreuve de programmation.
Merci de ne pas l'aider et de laisser tout le monde chercher.

Merci à tous. Bonne continuation à vous autres.