为什么python 2和3中chr(0x24)+ chr(0x84)的结果不同

时间:2018-02-12 20:24:09

标签: python python-3.x python-2.7

我使用python来解决来自exploit-exercises的protostar挑战。我对使用python 3的代码的不同输出感到惊讶。

payload = chr(0x24) + chr(0x84)
print (payload)

在终端:

$ python exploit-stack3.py | xxd
00000000: 2484 0a                                  $..
$ python3 exploit-stack3.py | xxd
00000000: 24c2 840a                                $...

有人可以解释一下c2的来源吗?

2 个答案:

答案 0 :(得分:3)

它来自encoding the character as UTF-8

>>> '\x84'.encode('utf-8')
b'\xc2\x84'

答案 1 :(得分:1)

嗯,ASCII中的可打印字符结束于0x7E(tilda:~)。 Python 2使用ASCII编码,Python3使用unicode。 0x84超过ASCII字符集,这就是输出不同的原因。