【问题标题】:Debugging a SHA-256 implementation调试 SHA-256 实现
【发布时间】:2012-10-13 10:21:42
【问题描述】:

我一直在使用 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 到内存?

【问题讨论】:

    标签: debugging assembly sha256 masm32


    【解决方案1】:

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

    【讨论】:

    • 现在我考虑到这一点来查看代码是有道理的。谢谢!我知道这可能是我忽略的一些简单的事情!
    猜你喜欢
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 2012-08-09
    • 2018-07-22
    • 1970-01-01
    • 2021-01-22
    • 2013-06-03
    相关资源
    最近更新 更多