为什么此汇编程序输出两次相同的字符串?

问题描述 投票:1回答:1

此Caesar密码程序生成解密字符串(长度始终为10),输出为output.txt文件。例如下面的代码制作.txt文件,

ILIKEASSEM

HOWAREYOUU

但是当我运行此代码时,文件为

ILIKEASSEM

ILIKEASSEM

即使通过Visual Studio 2017(MASM)调试器(T.T)进行调试,我也不知道出什么问题了>>

怎么了...?

INCLUDE Irvine32.inc

.data
Num_Str DWORD 2
;;key = 10
Cipher_Str BYTE "SVSUOKCCOW",0 
        BYTE "RYGKBOIYEE",0
filename    BYTE"output.txt", 0
fileHandle  DWORD ?
BUFFER_SIZE = 12
buffer  BYTE BUFFER_SIZE DUP(?)
L   BYTE "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0
Decipher    BYTE "QRSTUVWXYZABCDEFGHIJKLMNOP", 0
count       DWORD ?

.code
main PROC

    mov     edx, OFFSET filename
    call    CreateOutputFile        
    mov     fileHandle, eax         



    mov     ecx, Num_Str
    mov     esi, 0                  

    L1:
        push    ecx                 
        mov     ecx, 11                 

    L2: 
        mov     al, Cipher_Str[esi]     
        sub     al, 65                  


        movzx   ax, al                  
        movzx   eax, ax                 

        mov     edi, eax                



        mov     al, Decipher[edi]       

        mov     buffer[esi], al     
        inc     esi

    loop    L2


        mov     bl, 13
        mov     buffer[esi], bl

        inc     esi
        mov     bl, 10
        mov     buffer[esi], bl


        mov     eax,fileHandle
        mov     edx,OFFSET buffer
        mov     ecx, BUFFER_SIZE
        call    WriteToFile



        pop     ecx



    loop    L1




    mov     eax, fileHandle 
    call    CloseFile


exit
main ENDP
END main

此Caesar密码程序生成解密字符串(长度始终为10),输出为output.txt文件。例如下面的代码制作.txt文件,ILIKEASSEM HOWAREYOUU,但是当我运行此代码时,...

assembly x86 masm irvine32
1个回答
0
投票

您正在溢出12个字节的buffer

© www.soinside.com 2019 - 2024. All rights reserved.