2017-06-08 60 views
-2

我目前正在對一些文件進行加密操作。但是,我在覆蓋.txt文件時遇到了麻煩,並且很難確定哪裏出了問題。下面是我一直在研究的代碼的一部分,我認爲這有問題。MASM32使用程序集覆蓋文件

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 

查看我的代碼,夥計們!提前致謝。

+2

使用調試器和系統調用示蹤器。將錯誤處理添加到您的程序中。另外,如果您希望其他人提供幫助,請特別註釋您的代碼。給出比「有麻煩」更多的細節,描述會發生什麼。也就是說,'推WriteFile'是非常可疑的,你是不是指'調用WriteFile'? – Jester

+0

我沒注意到。謝謝。但是,代碼仍然不起作用。 – Pentagon

+0

另外,你的'jg skip'是可疑的,它會跳過所有內容,包括寫出文件。很難告訴你是否需要這些,只需提供有限的信息。 「不起作用」仍然不如「有麻煩」。另見[問]。 – Jester

回答

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

這是一個無用的考驗!沒有什麼比更大(有符號字節)127.
也許你打算測試上面(無符號字節)的條件?

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

只是一個想法。也許這個測試必須是重複每次迭代?我們不可能知道你的任務的這些細節。