
While it's technically the same algorithm as the 'common' CRC32, it uses a different seed, so it returns different results, thus it's useless for Zip, and all the countless applications of the deflate algorithm.
Starcraft 2 xteam time full#
The crc32 opcode implements the full algorithm with a single operation, however, it's not the commonly used CRC32 (used in Zip), but actually the CRC-32C (Castagnoli CRC-32), which uses a different polynomial.
for bus optimization purposes, all 3 cmpxchg opcodes always write the operand, even if the values are unchanged: this could trigger an exception on read-only memory. lock cmpxchg8b doesn't crash CPUs anymore,īut some tools might still show obsolete warnings about it. To effectively swap ax contents, one can use 86e0: xchg al, ah cmpxchg* In reality, it just clears the register, unexpectedly. it's a division, and quotient and remainder go to ah and al respectively.īswap is officially undefined on WORDS. it's officially defined with 10/0ah, but it just works with any byte. It makes it the first Add and Multiply opcode, as al = ah * operand + al. Moreover, they can operate on different parts of the same register, which has the potential to break trivial logic analyzers: 0f c0c4: xadd ah, alĪad is officially defined to use only 10/0Ah as a default operand, but can just use any other operand. Xchg, xadd are opcodes that affect both source and target operands (like fxch). Hopefully, 90 is truly a nop, even in 64 bits. And, on 64 bits, it clears the upper 32 bits of rax. However, xchg *ax, *ax has another encoding, which is not considered a nop. => eax, eax = eax, eax ) 91: xchg ecx, eax
This can be used as an anti-emulator or an anti-stepping: after some time of execution, GS will eventually be reset: set GS to X wait until GS is null. On 32bit Windows, GS is not saved in the execution context: when the OS switches from an application to another, the content of GS is lost.
Thus, a single FPU operation on st0 will modify fst, st0, but also mm7 (and cr0, under XP). MMX and FPU registers are overlapping, but in opposite directions: 0, 1,2,3.
maskmovdqu, vbroadcast, vzeroupper, vfnmadd132pd, vbroadcastf128 are long names. or, in, jz/jp/js/jo, bt are the smallest mnemonics. VirtualPC has been known to be incorrectly ignoring the 15 bytes limit. However, it's possible to almost reach that limit with legitimate operations: 2e 67 f0 48 818480 23df067e 89abcdef: lock add qword cs:, 0efcdab89hį0 2e 66 67 818418 67452301 efcdab89: lock add dword cs:, 089abcdefh Nothingadding one more prefix will reach the limit and trigger an exception:Ħ6 66 66 66 66 66 66 66 66 66 66 66 66 66 66 90: ?