5 Erreurs à trouver

bizzard4 Messages postés 155 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 15 février 2009 - 10 nov. 2006 à 14:41
PerfectSlayer Messages postés 30 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 29 août 2007 - 29 août 2007 à 10:59
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

ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
10 nov. 2006 à 20:04
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
 
0
_dune2_ Messages postés 141 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 20 avril 2011
15 nov. 2006 à 20:49
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 ...
0
bizzard4 Messages postés 155 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 15 février 2009
15 nov. 2006 à 21:23
?????????? explique un peu plus si cé vraiment la -_-

~~ Cordialement Francois Gingras
0
_dune2_ Messages postés 141 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 20 avril 2011
15 nov. 2006 à 22:34
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 ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PerfectSlayer Messages postés 30 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 29 août 2007
29 août 2007 à 10:59
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.
0
Rejoignez-nous