我使用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的来源吗?
答案 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字符集,这就是输出不同的原因。