Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;加解密 void encrypt\u字符(整数长度) { 字符温度; for(int i=0;i_C++_Assembly - Fatal编程技术网

C++ C++;加解密 void encrypt\u字符(整数长度) { 字符温度; for(int i=0;i

C++ C++;加解密 void encrypt\u字符(整数长度) { 字符温度; for(int i=0;i,c++,assembly,C++,Assembly,加密部分很好,但我想我会复制并粘贴代码到解密中,而不是递增,而是递减值,这样它会返回并解密数据 //--------------------------------------------------------------------------------------------------------------- //-----------------解密例程----------------------------------------------------------------

加密部分很好,但我想我会复制并粘贴代码到解密中,而不是递增,而是递减值,这样它会返回并解密数据


//---------------------------------------------------------------------------------------------------------------
//-----------------解密例程-------------------------------------------------------------------------
//
无效解密字符(整数长度)
{
字符温度;
对于(int i=0;i
回答:

为了执行与加密操作相反的操作,应使用递减而非递增的新例程替换对encrypt_nn的调用:

//---------------------------------------------------------------------------------------------------------------
//----------------- DECRYPTION ROUTINES -------------------------------------------------------------------------
//
void decrypt_chars(int length)
{
    char temp_char;                     

    for (int i = 0; i < length; i--)
    {
        temp_char = OChars[i];

        __asm {                     
            push   eax                  
            push   ecx                  

            movzx  ecx, temp_char       
            call   encrypt_nn           
            mov    temp_char, al        

            pop    ecx                   
            pop    eax              
        }
        EChars[i] = temp_char;      
    }
    return;
}
评论:

您已将循环语句从

 __asm {

    decrypt_nn:
        mov eax, ecx        
            dec eax 
            ret
    }
for(int i=0;i

for(int i=0;i
在第一种情况下,循环将遍历
0
length-1
之间的所有值。这意味着您将遍历字符数组(假设length是它的大小)

在第二种情况下,您将获得不可预测的行为,因为您正在测试
i
,但在每个循环迭代中执行
i--

查看更多信息。

这是汇编语言而不是c++你的问题是什么?所以基本上你只需从数组中提取一个字符并将其递增1,然后将最后一半存储回数组?这不是一个很好的加密。基本上,你只需dec ecx并将字符还原[编辑:这不是所谓的“cesar加密”?]是的,我正在尝试做cesar的加密,但我不太擅长汇编语言。谢谢,我刚刚注意到我的一些错误事实上,
I--
(除非你检查了MSVC对这段代码的实际作用),因为.编译器可以在编译时注意到,如果函数项上的
length>0
,这是不可避免的。它可能会发出非法指令,因此如果执行过,该函数就会出错。或者它可能会发出假定
length
必须为非正的代码,因此循环运行零次。也就是说,UB意味着一个范围限制。Th为了开悟,我将修复我的帖子
 __asm {

    decrypt_nn:
        mov eax, ecx        
            dec eax 
            ret
    }
for (int i = 0; i < length; i++)  
for (int i = 0; i < length; i--)