我在逆向工程写作中看到了很多代码模式,我不理解这个
(some_value >> 8) & 0xff
任何人都可以解释一下吗?
答案 0 :(得分:3)
您无需了解寄存器级别的内容。只需将int
视为int
即可。
当你使用像0x12345678
这样的int并将它向右移8位时会发生什么?
好吧,让我们看看:
>>> hex(0x12345678 >> 8)
'0x123456'
你已经敲掉了最右边的两个数字 - 即最右边的字节 - 因为一个字节是8位。
现在如果按位进行会发生什么,并且0xff
会发生什么?
>>> hex(0x123456 & 0xff)
'0x56'
除了两个最右边的数字 - 除了最后一个字节之外的所有内容 - 你已经删掉了所有,因为 把它放在一起: 所以你得到了倒数第二个字节。 你可以用这种方式提取int的每个字节:0xff
是一个满1
位的字节。< / p>
>>> hex((0x12345678 >> 8) & 0xff)
'0x56'
>>> 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'