crc32 是属于什么汇编代码?
crc32 是属于什么汇编代码?这是crc32校验代码吗?我尝试全部nop上下循环还是会检测到退出,为什么汇编代码里没有这种代码?
这个应该是CRC校验的 xiadengma 发表于 2022-1-28 20:58
这个应该是CRC校验的
怎么破? 不会破解,大胆猜测
cmp那里就是比较两个crc32是否相同的吧,就直接cmp rax,rax可能就可以了 Paranoid丶 发表于 2022-1-28 21:08
不会破解,大胆猜测
cmp那里就是比较两个crc32是否相同的吧,就直接cmp rax,rax可能就可以了
哪里有cmp? 痴迷仙剑 发表于 2022-1-28 21:19
哪里有cmp?
crc32指令下面第二行 cube 发表于 2022-1-28 21:22
crc32指令下面第二行
不行,那个不是校验数据的,那个是计次 Paranoid丶 发表于 2022-1-28 21:08
不会破解,大胆猜测
cmp那里就是比较两个crc32是否相同的吧,就直接cmp rax,rax可能就可以了
不行,那个不是校验数据的,那个是计次 本帖最后由 CRoot 于 2022-1-28 22:28 编辑
Starting with an initial value in the first operand (destination operand), accumulates a CRC32 (polynomial 11EDC6F41H) value for the second operand (source operand) and stores the result in the destination operand. The source operand can be a register or a memory location. The destination operand must be an r32 or r64 register. If the destination is an r64 register, then the 32-bit result is stored in the least significant double word and 00000000H is stored in the most significant double word of the r64 register.
The initial value supplied in the destination operand is a double word integer stored in the r32 register or the least significant double word of the r64 register. To incrementally accumulate a CRC32 value, software retains the result of the previous CRC32 operation in the destination operand, then executes the CRC32 instruction again with new input data in the source operand. Data contained in the source operand is processed in reflected bit order. This means that the most significant bit of the source operand is treated as the least significant bit of the quotient, and so on, for all the bits of the source operand. Likewise, the result of the CRC operation is stored in the destination operand in reflected bit order. This means that the most significant bit of the resulting CRC (bit 31) is stored in the least significant bit of the destination operand (bit 0), and so on, for all the bits of the CRC.
就是计算CRC的,但是不影响标志寄存器
以下是机翻:
从第一个操作数(目标操作数)的初始值开始,为第二个操作数(源操作数)累积一个CRC32(多项式11EDC6F41H)值,并将结果存储在目标操作数中。源操作数可以是一个寄存器或一个内存位置。目的操作数必须是一个r32或r64寄存器。如果目的地是r64寄存器,那么32位的结果将被存储在最小有效的双字中,000000H被存储在r64寄存器的最大有效双字中。
目标操作数中提供的初始值是存储在r32寄存器中的双字整数或r64 寄存器中最小有效的双字。为了逐步累积CRC32的值,软件在目标操作数中保留了上一次CRC32操作的结果,然后用源操作数中的新输入数据再次执行CRC32指令。源操作数中包含的数据是按反映的位顺序处理的。这意味着,源操作数中最有意义的位被视为商的最没有意义的位,以此类推,源操作数的所有位都是如此。同样,CRC操作的结果也是按照反射位顺序存储在目标操作数中。这意味着结果CRC的最有效位(第31位)被存储在目的操作数的最不有效位(第0位),以此类推,CRC的所有位都是如此。
你给的代码里面没看到对rsi的比较操作,最终计算完的crc值应该是存到了rsi之中。 CRoot 发表于 2022-1-28 22:23
就是计算CRC的,但是不影响标志寄存器
以下是机翻:
怎么破这种验证?
页:
[1]
2