在 Python 中模拟 SHL 和 SHR ASM 指令

在 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

谢谢。


尚方宝剑之说
浏览 315回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python