为什么在终端中内联打印转义的十六进制字符与在终端程序 运行 中打印转义十六进制字符之间存在差异?
Why is there a difference between printing escaped hex characters inline in the terminal and in a program running the the terminal?
我试图将字符串发送到服务器上的另一个应用程序 运行ning(我无权访问)。该字符串包含空字符。
现在我注意到当我 运行 脚本中的以下代码时,
print('abc\x00\x91\x11\x01123')
输出为:abc\x00\x91\x11123.
当我 运行 终端中的相同代码时想到:
python -c 'print("abc\x00\x91\x11\x01123")'
我得到输出:abc�123
在我的案例中,这是所需的输出。
为什么两个输出不同?
运行在脚本中使用 print 函数时如何获得第二个输出?
编辑:
我弄清楚是什么导致了差异。
pwntools 导致了这种行为。
但我仍然无法真正弄清楚为什么。
以下代码:
#!/usr/env/python
import pwn
print('abc\x00\x91\x11\x01123')
结果
abc\x00\x91\x11123
当我不导入pwn时,结果和预期的一样:
abc�123.
实际上没有区别。你的问题在别处,而不是在终端和脚本中的解释差异。
这是我在本地为您的示例提供的输出:
[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
在这台机器上,不可打印的字符似乎被替换为 _
但这里的要点是,如您所见,结果在解释器和终端中是相同的。
我希望这符合 Stack Overflow 标准的答案。
如果你玩手榴弹,对待就像手榴弹,而不是玩具。 PWN tools 似乎是一些用于开发的脚本小子工具。如果您阅读文档的前几段,您会发现以下内容:
As stated, we would also like to have the ability to get a lot of these side-effects by default. That is the purpose of this module. It does the following:
[...]Calls pwnlib.term.init() to put your terminal in raw mode and implements functionality to make it appear like it isn’t.
您已收到警告,但您还没有 RTFM。
我试图将字符串发送到服务器上的另一个应用程序 运行ning(我无权访问)。该字符串包含空字符。 现在我注意到当我 运行 脚本中的以下代码时,
print('abc\x00\x91\x11\x01123')
输出为:abc\x00\x91\x11123.
当我 运行 终端中的相同代码时想到:
python -c 'print("abc\x00\x91\x11\x01123")'
我得到输出:abc�123
在我的案例中,这是所需的输出。 为什么两个输出不同? 运行在脚本中使用 print 函数时如何获得第二个输出?
编辑: 我弄清楚是什么导致了差异。 pwntools 导致了这种行为。 但我仍然无法真正弄清楚为什么。 以下代码:
#!/usr/env/python
import pwn
print('abc\x00\x91\x11\x01123')
结果
abc\x00\x91\x11123
当我不导入pwn时,结果和预期的一样: abc�123.
实际上没有区别。你的问题在别处,而不是在终端和脚本中的解释差异。
这是我在本地为您的示例提供的输出:
[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
在这台机器上,不可打印的字符似乎被替换为 _
但这里的要点是,如您所见,结果在解释器和终端中是相同的。
我希望这符合 Stack Overflow 标准的答案。
如果你玩手榴弹,对待就像手榴弹,而不是玩具。 PWN tools 似乎是一些用于开发的脚本小子工具。如果您阅读文档的前几段,您会发现以下内容:
As stated, we would also like to have the ability to get a lot of these side-effects by default. That is the purpose of this module. It does the following:
[...]Calls pwnlib.term.init() to put your terminal in raw mode and implements functionality to make it appear like it isn’t.
您已收到警告,但您还没有 RTFM。