我正在研究一个我很着迷的主题,逆向工程。但是我遇到了一点速度碰撞。我知道按位运算符 xor 以及它对这些位的作用,但是当我在反汇编程序中查看它时,它似乎无法正常工作。我正在处理的一小段代码是:
MOV EAX, 0040305D
XOR DWORD PTR [EAX], 1234567
在 xor 发生之前,位于 0040305D 的位置 1234 或 31323334 十六进制(它表示为ASCII,因为它是从用户输入中获取的,并且它在内存中牢固地作为 31323334 驻留)。当我在互联网上查找 xor 计算器以检查以确保我在纸上做的一切正常时,我得到 xor 计算的结果为 30117653 < / em>十六进制。但是当我在反汇编程序中运行该操作时,它用 56771035 替换了 EAX 中的内存位置。
刚刚发生了什么?我在这里错过了什么吗?我检查了许多计算器的xor计算,我无法得到 56771035 的答案。有人可以帮我一把,告诉我我做错了吗?
-Dan
答案 0 :(得分:7)
显示的数字全部为十六进制,您忘记使用正确的字节顺序。如果用户输入为ascii 1234
,则表示内存包含字节31 32 33 34
。由于x86是小端,操作数1234567
是字节序列67 45 23 01
。执行xor
操作,我们得到你所看到的字节序列56 77 10 35
。