【发布时间】:2018-09-10 05:41:53
【问题描述】:
我在逆向工程的文章中看到了很多代码模式,但我不明白这一点
(some_value >> 8) & 0xff
谁能解释一下?
【问题讨论】:
-
这个表达式不关心/不说任何关于寄存器的内容。这只是对整数的简单位移/位与运算。
标签: python bit-manipulation reverse-engineering reverse bit-shift
我在逆向工程的文章中看到了很多代码模式,但我不明白这一点
(some_value >> 8) & 0xff
谁能解释一下?
【问题讨论】:
标签: python bit-manipulation reverse-engineering reverse bit-shift
您无需了解寄存器级别的内容。只需将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'
【讨论】: