我无法理解这个位操作python代码

时间:2018-03-31 11:02:57

标签: python bit-manipulation reverse-engineering reverse bit-shift

我在逆向工程写作中看到了很多代码模式,我不理解这个 (some_value >> 8) & 0xff 任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:3)

您无需了解寄存器级别的内容。只需将int视为int即可。

当你使用像0x12345678这样的int并将它向右移8位时会发生什么?

好吧,让我们看看:

>>> hex(0x12345678 >> 8)
'0x123456'

你已经敲掉了最右边的两个数字 - 即最右边的字节 - 因为一个字节是8位。

现在如果按位进行会发生什么,并且0xff会发生什么?

>>> hex(0x123456 & 0xff)
'0x56'

除了两个最右边的数字 - 除了最后一个字节之外的所有内容 - 你已经删掉了所有,因为0xff是一个满1位的字节。< / p>

把它放在一起:

>>> hex((0x12345678 >> 8) & 0xff)
'0x56'

所以你得到了倒数第二个字节。

你可以用这种方式提取int的每个字节:

>>> hex((0x12345678 >> 0) & 0xff)
'0x78'
>>> hex((0x12345678 >> 8) & 0xff)
'0x56'
>>> hex((0x12345678 >> 16) & 0xff)
'0x34'
>>> hex((0x12345678 >> 24) & 0xff)
'0x12'
>>> hex((0x12345678 >> 32) & 0xff)
'0x00'