Skip to content

Python 的有符号和无符号处理

假设地址 0xFFFFFFFFF,按有符号数来说是 -1,按无符号数来说是 4294967295

在 Python 中,假设 A = -1,如果(A & 0xFFFFFFFFF),最后输出结果是 4294967295

虽然这样是对的,但是对面下面的语句

if old_value < stack[i]:
    p.sendline('+' + str(address) + '+' + str(stack[i] - old_value))
else:
    p.sendline('+' + str(address) + '-' + str(old_value - stack[i]))

假设old_value = 1
- 如果 stack[i] == -1,那最后输出 +(1-(-1)) = +2,最终结果为 1+2=3
- 如果 stack[i] == 4294967295,那最后输出 +(4294967295-1) = 4294967294,最终结果为 1+4294967294=4294967295

所以最后结果处理方式应该如下

if stack[i] < 0:
    stack[i] = (1<<32) - stack[i]

Comments