Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python不会打印NOP_Python 3.x_Reverse Engineering - Fatal编程技术网

Python 3.x Python不会打印NOP

Python 3.x Python不会打印NOP,python-3.x,reverse-engineering,Python 3.x,Reverse Engineering,我正在尝试开发外壳代码来进行二进制开发练习。我需要打印到文件的指令之一是NOP(0x90)。无论出于何种原因,每当我试图打印这个字符时,我的Python环境(运行在Ubuntu 20.04上)就会挂起。换句话说,除非我将Ctrl-D移出环境并再次使用Python命令,否则我无法运行任何其他Python代码行。其他无法打印的字符不会出现这种情况。为了显示您的需求,我的意思是,以下是一个示例: $ python3 Python 3.8.2 (default, Apr 27 2020, 15:53:3

我正在尝试开发外壳代码来进行二进制开发练习。我需要打印到文件的指令之一是NOP(0x90)。无论出于何种原因,每当我试图打印这个字符时,我的Python环境(运行在Ubuntu 20.04上)就会挂起。换句话说,除非我将Ctrl-D移出环境并再次使用Python命令,否则我无法运行任何其他Python代码行。其他无法打印的字符不会出现这种情况。为了显示您的需求,我的意思是,以下是一个示例:

$ python3
Python 3.8.2 (default, Apr 27 2020, 15:53:34) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('\x55')
U
>>> print('\x80') # Python doesn't hang with other weird characters

>>> print('\x91')

>>> print('\x89')

>>> print('\x90') # Python does not respond after this line
此外,如果我尝试在shell中使用此命令,则会得到不同的结果。它无需挂起即可工作,但0xc2与0x90一起打印

$ python3 -c "print('\x90')" > test
$ xxd test 
00000000: c290 0a                                  ...

有没有办法在不挂起Python或添加0xc2字符的情况下将0x90字符打印到文件中?

以二进制模式打开文件,并使用
write
而不是
print


b
放在'\x90'前面,使其成为字节字符串。

因此,我最终找到了一种无需打开文件即可打印内容的方法

$ python -c "import sys; sys.stdout.buffer.write(b'\x90')" > test
$ xxd test
00000000: 90

我无法在Ubuntu18.04上用Python3.8.1重现这一点。它不适合我。而且,0xc2也是为其他奇怪的字符打印的。所以不仅仅是0x90。c290是U+90的UTF-8编码。没有多余的字符。你用的是什么终端?你是在使用终端多路复用器,比如tmux还是screen?我只是在使用基本的Ubuntu终端(我没有使用tmux或screen)。我知道c290是UTF-8编码,但我只想打印出0x90。有办法吗?