我无法理解这段python代码

我无法理解这段python代码,python,bit-manipulation,reverse-engineering,reverse,bit-shift,Python,Bit Manipulation,Reverse Engineering,Reverse,Bit Shift,我在逆向工程的编写中看到了很多代码模式,但我并不像这样理解它 (某些值>>8)&0xff 有人能解释一下吗?你不需要从一个层面上理解事情。只要把int看作int 如果取一个int,比如说,0x12345678并将其右移8位,会发生什么 好吧,让我们看看: >>> hex(0x12345678 >> 8) '0x123456' 您删除了最右边的两个数字,也就是最右边的字节,因为一个字节是8位 现在,如果按位并使用0xff,会发生什么情况 >>> h

我在逆向工程的编写中看到了很多代码模式,但我并不像这样理解它
(某些值>>8)&0xff

有人能解释一下吗?

你不需要从一个层面上理解事情。只要把
int
看作
int

如果取一个int,比如说,
0x12345678
并将其右移8位,会发生什么

好吧,让我们看看:

>>> hex(0x12345678 >> 8)
'0x123456'
您删除了最右边的两个数字,也就是最右边的字节,因为一个字节是8位

现在,如果按位并使用
0xff
,会发生什么情况

>>> hex(0x123456 & 0xff)
'0x56'
您删除了除最右边的两个数字之外的所有内容,即除最后一个字节之外的所有内容,因为
0xff
是一个充满
1
位的字节

把它放在一起:

>>> 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'

此表达式不关心/不表示任何有关寄存器的内容。这只是一个简单的整数位移位/按位and运算。非常感谢!我终于明白了