qilingframework / qiling

A True Instrumentable Binary Emulation Framework
https://qiling.io
GNU General Public License v2.0
5.07k stars 739 forks source link

Syscall ERROR: ql_syscall_getpeername DEBUG: 'PersistentQlFile' object has no attribute 'getpeername' #1382

Open AndreiAvadanei opened 1 year ago

AndreiAvadanei commented 1 year ago

*Describe the bug I receive the following error and it is not clear how to address.

[x] [Thread 2002]       Syscall ERROR: ql_syscall_getpeername DEBUG: 'PersistentQlFile' object has no attribute 'getpeername'
Traceback (most recent call last):
  File "/home/parallels/.pyenv/versions/3.9.5/lib/python3.9/site-packages/qiling/os/posix/posix.py", line 374, in load_syscall
    retval = syscall_hook(self.ql, *params)
  File "/home/parallels/.pyenv/versions/3.9.5/lib/python3.9/site-packages/qiling/os/posix/syscall/socket.py", line 521, in ql_syscall_getpeername
    peername = sock.getpeername()
AttributeError: 'PersistentQlFile' object has no attribute 'getpeername'
Traceback (most recent call last):
  File "src/gevent/greenlet.py", line 908, in gevent._gevent_cgreenlet.Greenlet.run
  File "/home/parallels/.pyenv/versions/3.9.5/lib/python3.9/site-packages/qiling/os/linux/thread.py", line 242, in _run
    self.ql.emu_start(start_address, self.exit_point, count=31337)
  File "/home/parallels/.pyenv/versions/3.9.5/lib/python3.9/site-packages/qiling/core.py", line 775, in emu_start
    raise self.internal_exception
  File "/home/parallels/.pyenv/versions/3.9.5/lib/python3.9/site-packages/qiling/core_hooks.py", line 127, in wrapper
    return callback(*args, **kwargs)
  File "/home/parallels/.pyenv/versions/3.9.5/lib/python3.9/site-packages/qiling/core_hooks.py", line 170, in _hook_intr_cb
    ret = hook.call(ql, intno)
  File "/home/parallels/.pyenv/versions/3.9.5/lib/python3.9/site-packages/qiling/core_hooks_types.py", line 25, in call
    return self.callback(ql, *args)
  File "/home/parallels/.pyenv/versions/3.9.5/lib/python3.9/site-packages/qiling/os/linux/linux.py", line 138, in hook_syscall
    return self.load_syscall()
  File "/home/parallels/.pyenv/versions/3.9.5/lib/python3.9/site-packages/qiling/os/posix/posix.py", line 392, in load_syscall
    raise e
  File "/home/parallels/.pyenv/versions/3.9.5/lib/python3.9/site-packages/qiling/os/posix/posix.py", line 374, in load_syscall
    retval = syscall_hook(self.ql, *params)
elicn commented 12 months ago

I guess the code you emulate tries to rediret stdout or stderr through a socket, but doesn't close them first. If you can attach a detailed log, that would be great.