我是大会新手,但不是编程新手以及它如何运作。因为我已经知道了很多语言,所以我决定让我的第一个ASM程序计算输入文件的SHA-1哈希值。我已经完成了许多单独的部分,但有两个部分我遇到了麻烦;我会在这里寻求帮助。
基本上,我对Big和Little端数字的概念以及如何在ASM中表示它们感到困惑。引用SHA-1 Psuedocode:
append length of message (before pre-processing), in bits,
as 64-bit big-endian integer
唯一想到的是,例如将数字1表示为:
[63 0's]1
或者
1[63 0's]
或者
[31 0's] 1 [32 0's]
基本上我的想法到目前为止基本上是:
mov eax, message ;Move message to be hashed into eax
shl eax, 64 ;Shift message over enough bits to store 64-bits
or eax, msglen ;Adds message length to the very end of message
这很可能是错误的,因为这都使用了32位寄存器,因此向左移位64位会产生巨大的溢出,但这只是我还没有解决的另一个问题。
我认为我已经偏离了轨道,但基本上我的问题是上面的代码是一个附加大端整数的正确方法吗?或者我是倒退了,还是我完全关闭了一切,等等。不确定这是否有意义,太累了。
答案 0 :(得分:1)
作为big-endian 64位整数的数字1的二进制表示是
<- Start of message End of message ->
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000001
^ big (most significant) end