Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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
Debugging 调试SHA-256实现_Debugging_Assembly_Sha256_Masm32 - Fatal编程技术网

Debugging 调试SHA-256实现

Debugging 调试SHA-256实现,debugging,assembly,sha256,masm32,Debugging,Assembly,Sha256,Masm32,我一直在使用MASM32开发SHA-256实现,并完成了一些源代码。但是,我不能让它正常工作,我已经查看了它,重写了它的一些部分,并将一些源代码复制到内联Delphi ASM中,并使其完美运行,但是我原来的ASM源代码有问题。考虑到我对这方面的经验不是很丰富,有没有可能有人看看资料来源,告诉我他们是否看到了我遗漏的东西?我已经做了一个Delphi实现,它工作得很好,所以我知道这不是算法本身的错误,而是ASM代码本身的错误 在我简单地让它工作之后,我计划优化任务。但请记住,我仍在学习(自学),因此

我一直在使用MASM32开发SHA-256实现,并完成了一些源代码。但是,我不能让它正常工作,我已经查看了它,重写了它的一些部分,并将一些源代码复制到内联Delphi ASM中,并使其完美运行,但是我原来的ASM源代码有问题。考虑到我对这方面的经验不是很丰富,有没有可能有人看看资料来源,告诉我他们是否看到了我遗漏的东西?我已经做了一个Delphi实现,它工作得很好,所以我知道这不是算法本身的错误,而是ASM代码本身的错误

在我简单地让它工作之后,我计划优化任务。但请记住,我仍在学习(自学),因此,如果你看到我在这篇文章中做了一些愚蠢的事情,我也希望能够学习。但我主要关心的是让它工作,因为我不知道错误在哪里

(由于空间问题,已删除ASM代码,因为我现在知道问题所在)

编辑:我发现了问题所在。这引出了下一个逻辑问题,因为我不知道:为什么这段代码会导致问题?

在SHA256Loop宏的末尾更改以下内容:

ADD  h, ECX  
ADD  h, EBX  ; h := t1 + t2;
为此:

ADD  ECX, EBX  ; h := t1 + t2;
MOV  h, ECX

修好了。为什么我不能向内存中添加两条指令,并获得与添加到寄存器和MOV到内存相同的结果?

您的第一个示例中有两条
ADD
指令,这取决于
h
之前的内容。第二个示例与前面的
h
内容无关。如果不能保证
h
的值为零,那么这两个示例的行为将有所不同。

现在我考虑代码时就考虑到了这一点。谢谢我知道这可能是我忽略的一件简单的事情!