【发布时间】:2012-04-06 19:19:23
【问题描述】:
我的EAX 寄存器包含xxxxxx9D 值,我有以下汇编代码:
C0C8 14 --> ROR AL,14
对我来说,这意味着EAX 的 32 位值的最后 8 位按位旋转 14 mod 8 = 6 个位置
0x9D = b1001 1101
会变成
b0111 0110 = 0x76
但是,OllyDbg 告诉我EAX = xxxxxxD9,这意味着 EAX 已按位旋转了 4 位!
我哪里错了?
【问题讨论】:
-
这是十六进制的 14,十进制的 20。
-
备案:以编译器友好的方式表达旋转的最佳实践,避免未定义的行为:stackoverflow.com/questions/776508/…。该答案的代码将使 gcc 和 clang 生成单个
ror指令。