2017-06-08 4 views
-2

Actuellement, je fais un cryptage dans certains de mes fichiers. Cependant, j'ai de la difficulté à écraser un fichier .txt et à avoir du mal à identifier ce qui s'est mal passé. Ci-dessous, la partie du code sur laquelle je travaille qui, je pense, a le problème.MASM32 Écrasement d'un fichier à l'aide de l'assemblage

push 0 
    push FILE_ATTRIBUTE_NORMAL 
    push OPEN_EXISTING 
    push 0 
    push 0 
    push FILE_READ_DATA 
    push offset fData.cFileName 
    call CreateFile 

    mov hndl, eax 

    push 0 
    push hndl 
    call GetFileSize 

    mov fSize, eax 

    push 0 
    push offset bfrLen 
    push fSize 
    push offset bfr 
    push hndl 
    call ReadFile 

    push hndl 
    call CloseHandle 

    lea esi, bfr 
    mov al, [esi] 
    cmp al, 7fh 
    jg skip 
    encrypt: 
    mov al, [esi] 
    xor al, 0ffh 
    mov [esi], al 
    inc esi 
    mov al, [esi] 
    cmp al, 00h 
    jne encrypt 

    push 0 
    push FILE_ATTRIBUTE_NORMAL 
    push CREATE_ALWAYS 
    push 0 
    push 0 
    push FILE_WRITE_DATA 
    push offset file 
    call CreateFile 

    mov hndl, eax 

    push offset bfr 
    call lstrlen 

    push 0 
    push offset bfrLen 
    push fSize 
    push offset bfr 
    push hndl 
    call WriteFile 

    push hndl 
    call CloseHandle 

    skip: 
    ret 

Passez en revue mon code, les gars! Merci d'avance.

+2

Utilisez un débogueur et un traceur syscall. Ajouter la gestion des erreurs à votre programme. En outre, commentez votre code particulièrement si vous voulez que d'autres aident. Donner plus de détails que "avoir un problème", décrire ce qui se passe. Cela dit, 'push WriteFile' est très suspect, n'entendez-vous pas' call WriteFile'? – Jester

+0

Je n'ai pas remarqué ça. Merci. Cependant, le code ne fonctionne toujours pas. – Pentagon

+0

De plus, votre 'jg skip' est suspect, il ignore tout, y compris l'écriture du fichier. Difficile de dire si vous le voulez ou non, avec les informations limitées que vous avez fournies. "ne fonctionne pas" n'est toujours pas mieux que "avoir un problème". Voir aussi [demander]. – Jester

Répondre

1
mov al, [esi] 
cmp al, 7fh 
jg skip 

Ceci est un test inutile! Rien ne peut jamais être plus grand (octet signé) que 127.
Peut-être que vous vouliez tester le au-dessus de (octet non signé) condition?

cmp byte [esi], 7Fh 
ja skip    ;Skip if from 128 to 255 

Juste une pensée. Peut-être que ce test doit être répété à chaque itération? Nous ne pouvons pas connaître ces détails de votre tâche.