我正在WSL上的pycharm上使用远程解释器(已通过本教程进行配置:https://www.jetbrains.com/help/pycharm/using-wsl-as-a-remote-interpreter.html)
我能够成功运行所需的一切,但是当我尝试使用pwntools(https://github.com/Gallopsled/pwntools)时,我能够在WSL bash python解释器上成功导入了它,但是在Pycharm上却没有成功。
这是我跑的:
from pwn import *
在Pycharm上卡住了,我打断了它,这是Exception(卡住的地方)的痕迹:
ssh://shahar@localhost:22/usr/bin/python -u /tmp/pycharm_project_271/pwnablekr/fd.py
Traceback (most recent call last):
File "/tmp/pycharm_project_271/pwnablekr/fd.py", line 1, in <module>
from pwn import *
File "/home/shahar/.local/lib/python2.7/site-packages/pwn/__init__.py", line 6, in <module>
pwnlib.args.initialize()
File "/home/shahar/.local/lib/python2.7/site-packages/pwnlib/args.py", line 208, in initialize
term.init()
File "/home/shahar/.local/lib/python2.7/site-packages/pwnlib/term/__init__.py", line 74, in init
term.init()
File "/home/shahar/.local/lib/python2.7/site-packages/pwnlib/term/term.py", line 109, in init
c = os.read(fd.fileno(), 1)
KeyboardInterrupt
Process finished with exit code 1
enter code here
在我的WSL重击中,它运行得很好:
shahar@MYCOMPUTERNAME:/mnt/c/Users/shahar$ python
Python 2.7.12 (default, Dec 4 2017, 14:50:18)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pwn import *
>>>
当我查看代码卡住的地方时(从Exception的痕迹中):
while True:
c = os.read(fd.fileno(), 1)
s += c
if c == 'R':
break
在脚本的开头作为全局变量:
fd = sys.stdout
我从互联网上了解到,此功能(此循环是其一部分)与接管终端有关。可能与我不是从终端运行有关吗? 有人以前见过这种问题吗?有一些有用的提示吗?
非常感谢您!
答案 0 :(得分:0)
没有有效的方法,我对其进行调试,问题是术语初始化。它也可能与TERM和TERMINFO的环境变量有关。我的解决方法是修改/usr/local/lib/python2.7/dist-packages/pwnlib/args.py
的最后一行,删除term.init()
,将其替换为其他内容以绕过pwnlib的初始化。
替换此行:
调试pwntools:
答案 1 :(得分:0)
我也有潜在的解决方法,它正在为环境添加PWNLIB_NOTERM。
import os
os.environ['PWNLIB_NOTERM'] = 'True' # Configuration patch to allow pwntools to be run inside of an IDE
import pwn
Screenshot showing it runs and we get an Encoder object instance
答案 2 :(得分:0)
还有另一种解决方法。
如果您使用 Pycharm
,您可以在运行配置中勾选 Run with Python console
框。
它可以在 Pycharm 2020.3
和 IPython
中工作。(我认为它也可以在没有 IPython 的情况下工作)
screenshot