MCPcopy Index your code
hub / github.com/qilingframework/qiling / test_proxy_fd_dup

Method test_proxy_fd_dup

tests/test_kernel_proxy.py:155–180  ·  view source on GitHub ↗

ql_proxy_fd.dup() creates a working copy.

(self)

Source from the content-addressed store, hash-verified

153 del ql
154
155 def test_proxy_fd_dup(self):
156 """ql_proxy_fd.dup() creates a working copy."""
157 from qiling.os.posix.kernel_proxy import KernelProxy
158 from qiling.os.posix.kernel_proxy.proxy_fd import ql_proxy_fd
159
160 ql = Qiling([self.HELLO_BIN], self.ROOTFS, verbose=QL_VERBOSE.OFF)
161 proxy = KernelProxy(ql)
162 proxy.forward_syscall('eventfd2', returns_fd=True)
163
164 hook = ql.os.posix_syscall_hooks[QL_INTERCEPT.CALL]['ql_syscall_eventfd2']
165 guest_fd = hook(ql, 0, 0)
166 fd_obj = ql.os.fd[guest_fd]
167
168 duped = fd_obj.dup()
169 self.assertIsInstance(duped, ql_proxy_fd)
170 self.assertNotEqual(fd_obj._proxy_fd, duped._proxy_fd)
171
172 # write on original, read on dup
173 fd_obj.write(struct.pack('<Q', 7))
174 data = duped.read(8)
175 self.assertEqual(struct.unpack('<Q', data)[0], 7)
176
177 fd_obj.close()
178 duped.close()
179 proxy.stop()
180 del ql
181
182 # -------------------------------------------------------------------------
183 # User hooks coexist with proxy hooks

Callers

nothing calls this directly

Calls 10

forward_syscallMethod · 0.95
stopMethod · 0.95
QilingClass · 0.90
KernelProxyClass · 0.90
hookFunction · 0.85
dupMethod · 0.45
writeMethod · 0.45
packMethod · 0.45
readMethod · 0.45
closeMethod · 0.45

Tested by

no test coverage detected