Packed Shuffle Bytes,反向操作
Packed Shuffle Bytes, reverse operation
需要 AVX 专家:
给出了洗牌指令
VPSHUFB ymm1, ymm2, ymm3/m256
根据文档,这个 "Shuffle bytes in ymm2 according to contents of ymm3/m256."
我的问题是:是否可以逆向操作,也就是说,知道ymm2和洗牌的结果,是否有可能得到ymm3?
例如
vpshufb ymm0, ymm0, ymmword ptr ds:[0x100]
我知道 ymm0 中已经加载了什么,以及结果,但我想了解如何获取 "control mask" ymmword....
is it possible to reverse the operation, in other words, knowing ymm2 and the result of the shuffling, is possible to get ymm3?
不,一般情况下不是。如果源数据有一些重复元素(在泳道内),您无法唯一确定随机播放控制向量是什么,因为该输出字节可能来自多个地方。
当然很容易想出 a 随机播放控件,它可以从该输入创建该输出。
当然,如果洗牌输入数据在每个 16 字节通道中是唯一的,那么是的,您可以唯一地确定每个输出元素必须来自的索引。
即使这样你也只能确定shuffle control每个字节的低4位。 (并且高位未设置,否则 vpshufb
将输出的那个字节归零。)位 6:4 对操作完全没有影响。 (查看手册的操作部分:https://www.felixcloutier.com/x86/pshufb。混洗控制向量元素的位 3:0 是源数据向量的索引。)
随机播放控制元素的高位是另一个可能的歧义:如果输入数据包含任何零字节,则输出零可能来自索引该源元素或来自设置了高位的控制元素。
顺便说一句,没有任何说明可以帮助您高效 执行此操作。 IDK 如果你能做得比一次搜索每个字节 1 的源位置更好。 (使用字节广播和 vpcmpeqb
-> vpmovmskb
-> bsf
一次搜索所有 16 个位置。)
需要 AVX 专家:
给出了洗牌指令
VPSHUFB ymm1, ymm2, ymm3/m256
根据文档,这个 "Shuffle bytes in ymm2 according to contents of ymm3/m256."
我的问题是:是否可以逆向操作,也就是说,知道ymm2和洗牌的结果,是否有可能得到ymm3?
例如
vpshufb ymm0, ymm0, ymmword ptr ds:[0x100]
我知道 ymm0 中已经加载了什么,以及结果,但我想了解如何获取 "control mask" ymmword....
is it possible to reverse the operation, in other words, knowing ymm2 and the result of the shuffling, is possible to get ymm3?
不,一般情况下不是。如果源数据有一些重复元素(在泳道内),您无法唯一确定随机播放控制向量是什么,因为该输出字节可能来自多个地方。
当然很容易想出 a 随机播放控件,它可以从该输入创建该输出。
当然,如果洗牌输入数据在每个 16 字节通道中是唯一的,那么是的,您可以唯一地确定每个输出元素必须来自的索引。
即使这样你也只能确定shuffle control每个字节的低4位。 (并且高位未设置,否则 vpshufb
将输出的那个字节归零。)位 6:4 对操作完全没有影响。 (查看手册的操作部分:https://www.felixcloutier.com/x86/pshufb。混洗控制向量元素的位 3:0 是源数据向量的索引。)
随机播放控制元素的高位是另一个可能的歧义:如果输入数据包含任何零字节,则输出零可能来自索引该源元素或来自设置了高位的控制元素。
顺便说一句,没有任何说明可以帮助您高效 执行此操作。 IDK 如果你能做得比一次搜索每个字节 1 的源位置更好。 (使用字节广播和 vpcmpeqb
-> vpmovmskb
-> bsf
一次搜索所有 16 个位置。)