【问题标题】:i cant understand this bit-manipulation python code [closed]我无法理解这个位操作 python 代码 [关闭]
【发布时间】:2018-09-10 05:41:53
【问题描述】:

我在逆向工程的文章中看到了很多代码模式,但我不明白这一点 (some_value >> 8) & 0xff 谁能解释一下?

【问题讨论】:

  • 这个表达式不关心/不说任何关于寄​​存器的内容。这只是对整数的简单位移/位与运算。

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


【解决方案1】:

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

当你取一个像 0x12345678 这样的 int 并将它右移 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'

【讨论】:

  • 非常感谢!终于明白了
猜你喜欢
  • 2016-01-16
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
相关资源
最近更新 更多