1

サーバー上で実行されている別のアプリケーション (アクセス権がない) に文字列を送信しようとしていました。文字列にヌル文字が含まれています。スクリプトで次のコードを実行すると、

print('abc\x00\x91\x11\x01123')

出力は abc\x00\x91\x11123 です。

ターミナルで同じコードを実行すると、次のようになります。

python -c 'print("abc\x00\x91\x11\x01123")'

出力として取得します:abc�123

私の場合、これは望ましい出力です。両方の出力が異なるのはなぜですか? スクリプトで印刷機能を実行するときに 2 番目の出力を取得するにはどうすればよいですか?

編集:何が違いを引き起こしているのかを突き止めました。pwntools がその動作を引き起こしました。しかし、私はまだその理由を本当に理解できません。次のコード:

#!/usr/env/python
import pwn

print('abc\x00\x91\x11\x01123')

結果は

abc\x00\x91\x11123

pwn をインポートしない場合、結果は予想どおり abc�123 になります。

4

2 に答える 2

0

実際には違いはありません。あなたの問題は他の場所にありますが、端末とスクリプトの解釈の違いではありません。

あなたの例のために私がローカルに持っている出力は次のとおりです。

[cecile@CC-PC ~]$ python
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('abc\x00\x91\x11\x01123')
abc_123
>>>
[cecile@CC-PC ~]$ python -c 'print("abc\x00\x91\x11\x01123")'
abc_123

このマシンでは、印刷できない文字が に置き換えられているように見え_ますが、ここでのポイントは、ご覧のとおり、インタープリターでもターミナルでも同じ結果になるということです。

于 2019-04-14T16:38:23.583 に答える