Masm :: se copier avec gestion des erreurs

Contenu du snippet

voici un code que je vien de faire qui permet a une appli de se copier, avec gestion des erreurs.

Source / Exemple :


; #########################################################################

.386
.model flat, stdcall
option casemap :none   ; case sensitive

; #########################################################################

      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

; #########################################################################
.data
    ; # variable dynamiques #
    filename    dd 0
    dirname     dd 0

.code

    Mtitle      db "codé par BlackWizzard",0
    message     db "fichier copié avec succes :)",0
    erreurmsg   db "erreur durant la copie :(",0
    newname     db "test.exe",0
start:

    push 46h                    ; taille maximum buffer (+ si crainte du buffer overflow)
    push offset filename        ; variable qui va accueillir la reponse
    push 0                      ; sais pas a koi ça correspond
    call GetModuleFileNameA     ; appel de l'API
                                ; on connais le nom de notre programme, on commence la copie
    push offset newname         ; argument "destination"
    push offset filename        ; argument "fichier source"
    call CopyFileA              ; on appel l'API
    cmp eax, 0                  ; si eax = 0: erreur (fichier deja existant, etc...)
    jz short erreur             ; dans ce cas, on va direct a "erreur:" pour signaler
    
    push MB_OK                  ; MB_OK = 0
    push offset Mtitle          ; le titre
    push offset message         ; le message
    push 0                      ; sais pas
    call MessageBox             ; on appel l'API

    push 0                      ; sais pas
    call ExitProcess            ; on appel l'API pour terminer le programme
    
erreur:                         ; en cas d'erreur
    push MB_OK  ; MB_OK = 0     ; blablabla...G deja expliké plus haut...
    push offset Mtitle
    push offset erreurmsg
    push 0
    call MessageBox

    push 0
    call ExitProcess

end start

Conclusion :


un chose que G pas compris, si je fait un appel a l'API GetCurrentDirectoryA (que je met dans une variable dirname), la variable filename (GetModuleFileNameA) sera corrompu, elle sera toute melangé...
pkoi ça fait ça? Pkoi je px pas faire appel aux 2 api a la suite, sans que ça me pourrisse la premiere variable??

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.