如何在Python中模拟XMM寄存器行为

2024-06-17 12:14:26 发布

您现在位置:Python中文网/ 问答频道 /正文

如何实现与无符号整数的128位汇编寄存器相同的行为

例如,右移时,最高有效位将归零,或左移时,总大小将不会扩展,并将继续保持128位。 Numpy只升到64位整数

下面是一个实际的例子:

int128bits = 0x00000001000000010000000100000001
int128bits = int128bits << 0xff

期望:

int128bits=0x00000000000000000000

现实:

int128bits=0x800000008000000080000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000


Tags: numpy符号整数寄存器例子现实右移int128bits
1条回答
网友
1楼 · 发布于 2024-06-17 12:14:26

我偶然发现了PeachPy的解决方案

from peachpy import *
from peachpy.x86_64 import *

def decrypt(dword1):
        #Assembler instructions to Transform
        x = Argument(uint64_t)
        with Function("DotProduct", (x,), uint64_t) as asm_function:
            #Load var and Shift right
            LOAD.ARGUMENT(rax, x)
            MOVQ(xmm2, rax)
            MOVLHPS(xmm2, xmm2)
            PSRLDQ(xmm2, 0xf)
            
            MOVQ(rax, xmm1)
            RETURN(rax)

        #Read Assembler Return
        python_function = asm_function.finalize(abi.detect()).encode().load()
        return python_function(dword1)
        
print(decrypt(0x0000000100000001))

相关问题 更多 >