XOR EAX、EBX 有别的用途吗?

逆向工程 部件
2021-06-22 06:11:24

我在汇编代码中有以下行:

 XOR EAX, EBX

所以,然后我搜索了一下,发现 XOR 代表一种“交换算法”。你可以在这里阅读:http : //en.wikipedia.org/wiki/XOR_swap_algorithm

但是当我查看ollydbg的注册窗口时,我有以下内容

 EAX = 00000068
 EBX = 0000003B

现在,在注册窗口行之后

EAX = 000000053
EBX = 0000003B

但是从我在维基百科文章中读到的内容来看,我期望以下内容

EAX = 0000003B
EBX = 00000053

最后,我可以说执行了正常的 XOR 操作,因为:

0111011   =>EAX=0000003B 
1101000   =>EBX=00000068
-------
1010011   =>EAX=00000053

所以我的问题是为什么不执行交换算法。或者换句话说:我什么时候可以期待交换算法?

2个回答

正如第一个答案所述,异或是逐位异或,而不是异或交换。

要执行您从维基百科中引用的 Xor 交换,需要3 条指令

xor eax, ebx
xor ebx, eax
xor eax, ebx

由于您询问了 XOR目的,我想我会包含一些其他概念供您阅读,因此您可能对 XOR 的期望有所了解

您可以使用 XOR 清除寄存器:

xor eax,eax

计算绝对值:

cdq
xor eax,edx
sub eax,edx

XOR 可用于加密:http : //en.wikipedia.org/wiki/XOR_swap_algorithm

XOR 用于 CRC 校验和算法:http : //en.wikipedia.org/wiki/Cyclic_redundancy_check

XOR 可用于计算格雷码:http : //www.morkalork.com/mork/article/74/How_to_understand_and_use_Gray_code.htm#.U6RhN_ldXvI

这只是冰山一角。该指令可用于多种情况。

XOR助记符不表示XOR交换; 它代表按位异或