begin process at 2012 05 24 03:23:33
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Api Windows

 > MASM :: SE COPIER AVEC GESTION DES ERREURS

MASM :: SE COPIER AVEC GESTION DES ERREURS


 Information sur la source

Note :
Aucune note
Catégorie :Api Windows Niveau :Débutant Date de création :16/07/2003 Date de mise à jour :16/07/2003 04:32:02 Vu :3 389

Auteur : BlackWizzard

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note


 Description

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

Source

  • ; #########################################################################
  • .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
; #########################################################################

.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??


 Sources du même auteur

MASM :: GETMODULEFILENAMEA :: RECUPERER LE NOM DE L'EXECUTAB...
[CODE 04] RECUPERER LE CARACTÉRE TAPÉ ET LES COORDONNÉES DE ...
[CODE 03] LES EVENEMENTS D'UNE FENETRE. [MASM32]
[CODE 02] DEPLACER UNE FENETRE SANS LA BORDURE [MASM32]
[CODE 01] CREATION D'UNE FENETRE [MASM32]

 Sources de la même categorie

Source avec Zip Source avec une capture BODY_ROTATION BASÉ SUR LE TRAVAIL DE TOM par jose2pepe
Source avec Zip Source avec une capture FROM TOM'S CUBE_ROTATION AND CUBE_5 CUBE COLOR RENDERIZED par jose2pepe
Source avec Zip REUTILISER N'IMPORTE QUEL PROGRAMME EX:WORDPAD par ToutEnMasm
Source avec Zip CRÉER DES TABLEAUX DE DONNÉES DE MANIÈRE DYNAMIQUE par ToutEnMasm
Source avec Zip AFFICHAGE DATE ET HEURE AVEC DES BITMAPS par jejamar

Commentaires et avis

Commentaire de BruNews le 16/07/2003 11:34:41 administrateur CS

.data
filename db 260 dup(0)
dirname db 260 dup(0)

la oui que devrait aller, faut reserver la place, tu avais 4 octets seulement pour file et dir, et si tu avais eu d'autres variables derriere auraient ete ecrasees idem.

Commentaire de BlackWizzard le 16/07/2003 12:00:59 administrateur CS

ok!
mercu! :)

Commentaire de Dean le 17/07/2003 21:05:16

BOOL CopyFile(LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, BOOL bFailIfExists);

Tu est sûr qu'il n'y a pas un troisième paramètre à CopyFile ? Sur ton source je n'en vois que deux :-)

Commentaire de BlackWizzard le 17/07/2003 23:05:33 administrateur CS

ha ouai...
ba G recup le code sur une source decompilé...alors les parametre, je met ce que je trouve ;)
dans la source (virus) le programme se copie dans le rep windows (qu'il recup avant) et si il y a une erreur, alors il juge qu'il s'est deja copié, alors dans ce cas, il s'arrete.

Commentaire de BlackWizzard le 17/07/2003 23:06:06 administrateur CS

tu sais pas ou je px trouver une liste d'api trié par fichier (user32.dll, etc)?

Commentaire de BruNews le 17/07/2003 23:07:51 administrateur CS

MSDN a differents tris des APIs, c'est de loin la source la + fiable.

Commentaire de BlackWizzard le 17/07/2003 23:10:14 administrateur CS

ok
thx

Commentaire de Dean le 18/07/2003 00:28:52

Le fichier Win32API.hlp est pas mal non plus, le classement ne se fait pas selon des DLLs mais dans un ordre logique (Entrées-sorties, hooking, etc ...), et on peut quand même voir les libs dont sont issues les fonctions.

Commentaire de BlackWizzard le 18/07/2003 00:37:39 administrateur CS

dis moi ou tu le trouve ton fichier car celui que G trouvé, il fait 232Ko et il est mal foutu...

Commentaire de BruNews le 18/07/2003 00:44:25 administrateur CS

pour BlackWizzard, on peut discuter MSDN.

Commentaire de Dean le 18/07/2003 00:52:47

ftp://ftpc.borland.com/pub/delphi/techpubs/delphi2/win32.zip

Je crois qu'il existe une version plus récente fournie avec Delphi, et également récupérable avec l'update tool de Dev C++.

Commentaire de SMarmotte le 22/07/2003 20:55:29

Y'a un truc qui devrai t'allerter grave mon gars
GetModuleFileNameA prend pour 2nd paramètre un buffer pour y stocker le nom de ton EXE. Toi tu lui fourni un DWORD (qui est aussi un buffer ..... mais de 4 octets)
Ce que je te conseille :: à la place de
    filename    dd 0
    dirname     dd 0
tu mets
    filename    db 260 dup (0)
    dirname     db 260 dup (0)

comme ça : adieu ton problème ...

Commentaire de BlackWizzard le 23/07/2003 02:45:13 administrateur CS

thx...
on m'a deja dit plus haut dans les commentaire...
G pas corrigé la source encore..

Commentaire de ManChesTer le 27/07/2003 03:30:34 administrateur CS

Bon BlackWizard pour les filenames 2 soluces sous windows:

1 : db Max_Path dup(0) <== max_path=Taille max d'un chemin sous win qui peut etre bien supèrieur a 256chars....

2 : Tu fais un LocalAlloc ou GlobalAlloc (api) sur ton pointeur puis un LocalFree ou GlobalFree des que tu n'utilise plu ton pointer ...

L' Alloc est et de loin la meilleur solution....

Bon Coding...

ManChesTer.

Commentaire de BruNews le 09/08/2003 11:02:25 administrateur CS

LocalAlloc et GlobalAlloc ne sont presentes que pour assurer la compatibilite 16 bits.
Sur win32, HeapAlloc ou VirtualAlloc.

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,108 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales