调试SHA-256实现

时间:2012-10-12 19:55:13

标签: debugging assembly sha256 masm32

我一直在使用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

修正了它。为什么我不能对存储器执行两条ADD指令并获得与ADD相同的结果,然后将MOV注册到存储器?

1 个答案:

答案 0 :(得分:1)

包含两条ADD指令的第一个示例取决于h的先前内容。第二个示例独立于h的先前内容。如果h的值不能保证为零,则这两个示例的行为会有所不同。