在 x86_64 ASM 中,以下指令分别执行按位左移和右移。
SHL rax, cl
SHR rax, cl
我想用 Python 模拟这些指令。
对于诸如:0x613025F862 之类的值,我可以执行以下操作:
result = 0x613025F862 << 0x10
但是,对于较大的值,我得到不同的结果:
0x60018DDDBD500063 << 0x10
它给我的结果为:0x60018dddbd5000630000。但是,在 ASM 中,结果将是:0x8dddbd5000630000
我可以通过执行以下操作在 Python 中获得上述结果:
(0x60018DDDBD500063 << 0x10) & 0xffffffffffffffff
现在,我如何编写一个有效的通用函数来给出正确的结果?
为此,我编写了如下所示的函数:
def shift_left(input):
result = input << 0x10
if result > 0xffffffffffffffff:
result = result & 0xffffffffffffffff
else:
result = result
return result
谢谢。
相关分类